jsf 1.2,jboss 4.2.3和richfaces 3.3.3
我正在尝试将a的索引发送为a,但它一直返回null:
<ui:repeat id="al11" var="albumslistvalue1" value="#{AlbumDetailBean.getAlbumImagesList()}" varStatus="listimages">
<h:form>
<h:commandLink value="proxima" id="next" action="#{AlbumDetailBean.escreveparam()}">
<f:param name="fotoid" value="#{listimages}" />
</h:commandLink>
</h:form>
</ui:repeat>
escreveparam()方法只写入参数:
public void escreveparam(){
String fotoid = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getParameter("fotoid");
System.out.println("Teste:" + fotoid);
}
为什么它总是为空?
答案 0 :(得分:1)
您正在使用JSF 1.x,这意味着您正在使用Facelets 1.x(如jsf-facelets.jar
文件中所示)。 <ui:repeat>
标记位于Facelets 1.x 无 varStatus
属性中。它已在Facelets 2.0中引入。
您需要寻找替代方法。例如。 <c:forEach>
<c:forEach value="#{bean.albums}" var="album" varStatus="loop">
<h:form>
<h:commandLink id="next" value="proxima" action="#{bean.next}">
<f:param name="id" value="#{loop.index}" />
</h:commandLink>
</h:form>
</c:forEach>
(请注意,您对varStatus
对象的初始使用是完全错误的,它不会返回原始索引,而是complete object保存所有迭代状态详细信息,以及其他一个getIndex()
方法,你实际上应该使用#{listimages.index}
或其他东西 - 提供你正在使用Facelets 2.x)
或只是迭代的Album
对象本身的ID
<ui:repeat value="#{bean.albums}" var="album">
<h:form>
<h:commandLink id="next" value="proxima" action="#{bean.next}">
<f:param name="id" value="#{album.id}" />
</h:commandLink>
</h:form>
</ui:repeat>
无论哪种方式,只需使用<managed-property>
中的faces-config.xml
值#{param.id}
或ExternalContext#getRequestParameterMap()
来检索它:
public void next() {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
// ...
}
顺便说一下,由于您的环境似乎支持JBoss EL(通过在EL中使用带括号的完整方法名称表示),您也可以将整个Album
作为操作方法参数传递
<ui:repeat value="#{bean.albums}" var="album">
<h:form>
<h:commandLink id="next" value="proxima" action="#{bean.next(album)}" />
</h:form>
</ui:repeat>
与
public void next(Album album) {
// ...
}