CommandButton中的JSF ViewParam

use*_*erk 7 jsf primefaces

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

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

<f:metadata>
 <f:viewParam name="list" value="#{bean1.list}" converter="listConverter"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

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

但现在我正在尝试使用另一个页面(page2.jsf)来创建术语列表.我正在使用Primeface DataTable,遵循此示例: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>
Run Code Online (Sandbox Code Playgroud)

或这个:

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

其中bean2有一个selectedItems [],其中包含所选对象.

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

有帮助吗?提前致谢.

Arj*_*jms 8

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

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

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

例如

<p:commandButton action="#{bean2.navigateWithSelection}" />
Run Code Online (Sandbox Code Playgroud)

然后在你的bean中:

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

根据注释,如果bean2是不了解页面的通用bean,则可以将目标页面作为参数传递:

<p:commandButton action="#{bean2.navigateWithSelection('page1')}" />
Run Code Online (Sandbox Code Playgroud)

再次在你的bean中:

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