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

use*_*929 3 jsf-2

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

我想要做这样的事情:

链接:

http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load
Run Code Online (Sandbox Code Playgroud)

支持豆:

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

     public void load(int id){ ... }
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 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" />
Run Code Online (Sandbox Code Playgroud)

在托管bean中:

private Integer id;
private Data data;

public void load() {
    data = service.find(id);
}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的示例中,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" />
Run Code Online (Sandbox Code Playgroud)

也可以看看: