Вие използвате 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
беше напълно погрешно, то не ви връща необработения индекс, а пълен обект, съдържащ всички подробности за състоянието на итерация, с между другото getIndex()
метод, всъщност трябваше да използвате #{listimages.index}
или нещо друго вместо това -- при условие, че сте използвали Facelets 2.x)
или само идентификатора на итерирания Album
обект
<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) {
// ...
}
person
BalusC
schedule
14.08.2012