如何从link / non-faces-request调用JSF支持bean方法

时间:2012-11-30 17:07:57

标签: jsf-2

用例是直接从超链接(Non-Faces-Request)调用JSF 2.x Backing Bean上的方法。这样做的最佳方式是什么?

我想要做这样的事情:

链接:

http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load

支持Bean:

@Named (value = "loaddata")
public class DataLoader {

     public void load(int id){ ... }
}

1 个答案:

答案 0 :(得分:5)

在目标视图中使用<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);
}

请注意,在上面的示例中,网址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" />

另见: