我正在使用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&includeViewParams=true" >
<f:attribute name="list" value="#{bean2.convertSelectedItemsToString()}" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
或这个:
<p:commandButton action="page1?faces-redirect=true&includeViewParams=true" >
<f:param name="list" value="#{bean2.convertSelectedItemsToString()}" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
其中bean2有一个selectedItems [],其中包含所选对象.
不用说......它不起作用.
有帮助吗?提前致谢.
命令按钮不使用属性或参数来构造重定向发生的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)
| 归档时间: |
|
| 查看次数: |
11323 次 |
| 最近记录: |