来自 CommandButton 的 JSF ViewParam

标签 jsf primefaces

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

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

<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[] 与选定的对象。

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

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

最佳答案

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

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

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

例如。

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

然后在你的 bean 中:
public String navigateWithSelection() {
    return "page1?faces-redirect=true&" + convertSelectedItemsToString();
}

根据评论,如果 bean2是一个对页面一无所知的通用bean,可以将目标页面作为参数传入:
<p:commandButton action="#{bean2.navigateWithSelection('page1')}" />

然后再次在你的 bean 中:
public String navigateWithSelection(String target) {
    return target + "?faces-redirect=true&" + convertSelectedItemsToString();
}

关于来自 CommandButton 的 JSF ViewParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333187/

相关文章:

java - 如何在jsf中获取应用程序范围变量?

javascript - 使用监听器更改的值执行 onevent

ajax - 错误: <f:ajax> contains an unknown id when used with composite:insertChildren

jsf-2 - 如何在 PrimeFaces 中以编程方式创建对话框?

jsf - Uncaught ReferenceError : $ is not defined JSF Primefaces (h:head included)

java - 使用 Primefaces 验证码时出现未知主机异常

html - 需要帮助在命令按钮中显示图标图像

spring - LifecycleBase.handleSubClassException 空指针异常导致Tomcat启动

javascript - JSF 数据表分页中的当前页码

internet-explorer - 脚本5009 : 'Primefaces' is undefined in IE9 - Error disappears after reloading