用例是直接从超链接(非面孔请求)调用 JSF 2.x 支持 Bean 上的方法。做这个的最好方式是什么?
我想做这样的事情:
链接:
http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load
支持豆:
@Named (value = "loaddata")
public class DataLoader {
public void load(int id){ ... }
}
用例是直接从超链接(非面孔请求)调用 JSF 2.x 支持 Bean 上的方法。做这个的最好方式是什么?
我想做这样的事情:
链接:
http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load
支持豆:
@Named (value = "loaddata")
public class DataLoader {
public void load(int id){ ... }
}
<f:viewParam>
在目标视图中用于将 GET 参数设置为 bean 属性并用于调用<f:event type="preRenderView">
对它们的操作。
在show.xhtml
:
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" required="true" />
<f:event type="preRenderView" listener="#{bean.load}" />
</f:metadata>
<h:message for="id" />
在托管 bean 中:
private Integer id;
private Data data;
public void load() {
data = service.find(id);
}
请注意,在上面的示例中,URLhttp://localhost/show.xhtml?id=30
就足够了。您始终可以将更多参数设置为 bean 属性,并拥有一个代表所有内容的“上帝”bean,但这毕竟可能很笨拙。
另请注意,您可以将 a 附加Converter
到<f:viewParam>
(就像您在 中所做的那样<h:inputText>
)。这种load()
方法很可能完全是多余的。
<f:metadata>
<f:viewParam name="id" value="#{bean.data}"
converter="dataConverter" converterMessage="Bad request. Unknown data."
required="true" requiredMessage="Bad request. Please use a link from within the system." />
</f:metadata>
<h:message for="id" />