我正在尝试将参数传递给其他页面。我有一个图像类别,该列表在会话范围内,在我的标题模板中为每个类别创建一个链接。
我想重定向到一个新页面,并通过选定的类别。
<h:dataTable id="categoryMenu" value="#{menuBean.listCategory}" var="category">
<h:column>
<h:link value="#{category.name}"
outcome="/image/imageList.xhtml" >
</h:link>
</h:column>
</h:dataTable>
但是现在我希望我的页面imageList.xhtml与ImageListBean相关联.java获得选定的类别。
我通过使用 f:param 请求 GET 参数尝试了很多事情,但由于我的 ImageListBean.java 必须作为视图范围,它不起作用。
你的ViewScoped
豆应该不是问题。使用此代码:
<h:link value="#{category.name}" outcome="/image/imageList.xhtml">
<f:param name="categoryName" value="#{category.name}"/>
</h:link>
您应该能够通过以下方式在后备 Bean 中访问此参数:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("categoryName")
您是否在imageList.xhtml上尝试过viewParam?
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
它基本上执行以下操作:
- 按名称 ID 获取请求参数值。 如有必要,转换并验证
- 它(您可以使用必需的、验证器和转换器的属性,并像 ) 一样在其中嵌套 a 和 )
- 如果转换和验证成功,则将其设置为 #{bean.id} 表示的 Bean 属性
您可以在结果链接上传递类别 id(例如,imageList.xhtml?id=1)并在 ImageListBean 上检索它,一旦您拥有"id"参数,您就可以在数据库上搜索类别。