如何从链接/非面孔请求调用 JSF 支持 bean 方法
Posted
技术标签:
【中文标题】如何从链接/非面孔请求调用 JSF 支持 bean 方法【英文标题】:How to invoke JSF backing bean method from link/non-faces-request 【发布时间】:2012-11-18 22:36:09 【问题描述】:用例是直接从超链接(非面孔请求)调用 JSF 2.x 支持 Bean 上的方法。最好的方法是什么?
我想做这样的事情:
链接:
http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load
支持 Bean:
@Named (value = "loaddata")
public class DataLoader
public void load(int id) ...
【问题讨论】:
【参考方案1】:在目标视图中使用<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);
请注意,在上面的示例中,URL http://localhost/show.xhtml?id=30
就足够了。您始终可以将更多参数设置为 bean 属性,并拥有一个代表所有内容的“上帝”bean,但这毕竟可能很笨拙。
还请注意,您可以将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" />
另见:
Communication in JSF 2 - Processing GET request parameters What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?【讨论】:
虽然BalusC的解决方案调用了bean上的方法,但是并没有触发jsf导航。过了一会儿,我发现这个解决方案完全涵盖了我的用例:[link]docs.jboss.org/seam/3/latest/reference/en-US/html_single/… @user1866929:你没有说你需要导航。为此,请查看以下答案:***.com/questions/13530651/… 请注意,JSF 2.2 将附带类似的<f:viewAction>
。以上是关于如何从链接/非面孔请求调用 JSF 支持 bean 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 页面加载之前在支持 bean 中启动特殊的 init 事件?
JSF 如何从支持 bean 重定向到支持 bean 中动态构建的 URL?
如何在 JSF 中正确使用组件绑定? (会话范围 bean 中的请求范围组件)