【问题标题】:How to invoke JSF backing bean method from link/non-faces-request如何从链接/非面孔请求调用 JSF 支持 bean 方法
【发布时间】: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){ ... }
}

【问题讨论】:

    标签: jsf-2


    【解决方案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 附加到&lt;f:viewParam&gt;(就像您在&lt;h:inputText&gt; 中所做的那样)。 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" />
    

    另见:

    【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多