【问题标题】:JSF ViewParam from CommandButton来自 CommandButton 的 JSF ViewParam
【发布时间】:2012-09-02 05:27:42
【问题描述】:

我正在使用 JSF 和 Primefaces,我的问题是:

我有一个页面 (page1.jsf) 接收带有字符串列表(空格分隔)的视图参数:

<f:metadata>
 <f:viewParam name="list" value="#{bean1.list}" converter="listConverter"/>
</f:metadata>

listConverter 将字符串转换为单个单词的列表。 如果我通过 url 访问该页面(例如:page1.jsf?list=word1 word2 word3")一切正常!

但现在我正在尝试使用另一个页面 (page2.jsf) 来创建该术语列表。 我正在使用 Primeface 数据表,遵循以下示例:http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

我想让用户选择多行(复选框 Primeface 示例),然后按下一个按钮,该按钮将重定向到 page1.jsf 并将所选项目列表作为参数传递(例如,使用 Primeface 展示示例,传递所选车型的列表)。

我正在尝试这样做:

<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" >
 <f:attribute name="list" value="#{bean2.convertSelectedItemsToString()}" />
</p:commandButton>

或者这个:

<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" >
 <f:param name="list" value="#{bean2.convertSelectedItemsToString()}" />
</p:commandButton>

其中 bean2 有一个 selectedItems[] 对象被选中。

不用说...它不起作用。

有什么帮助吗? 提前致谢。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    命令按钮不使用属性或参数来构造发生重定向的 URL。

    为此,您通常使用h:commandLink 或可选的h:outputLink,但您需要注意,这些参数将按照请求页面时的状态呈现参数。如果用户在此之后对选择进行更改,这些将不会反映在链接中。

    另一种可以为您提供最新选择的方法是使用操作方法并在那里构造重定向 URL。

    例如

    <p:commandButton action="#{bean2.navigateWithSelection}" />
    

    然后在你的 bean 中:

    public String navigateWithSelection() {
        return "page1?faces-redirect=true&" + convertSelectedItemsToString();
    }
    

    根据cmets,如果bean2是一个不知道页面的通用bean,你可以将目标页面作为参数传入:

    <p:commandButton action="#{bean2.navigateWithSelection('page1')}" />
    

    然后再次在你的 bean 中:

    public String navigateWithSelection(String target) {
        return target + "?faces-redirect=true&" + convertSelectedItemsToString();
    }
    

    【讨论】:

    • 作为临时解决方案,我采用了第二种方法。但我不喜欢它,因为那样我的控制器(bean)在很大程度上依赖于我的观点。我希望 jsf 能为我提供更好的解决方案。
    • 在 JSF 中,支持 bean 按照惯例“应该”支持单个视图,因此支持 bean 可以依赖于视图。 bean2.convertSelectedItemsToString 不是已经查看特定的,还是您在那里做一些通用的事情?如果您需要通用解决方案,您可以将页面作为参数传递。查看更新的答案。
    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2012-12-11
    • 2015-01-02
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多