3

用例是直接从超链接(非面孔请求)调用 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){ ... }
}
4

1 回答 1

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);
}

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

也可以看看:

于 2012-11-30T17:45:18.667 回答