Вы используете 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