Значение не сохраняется для параметра действия, когда он внутри интерфейса:repeat
Ниже мой код:
<ui:repeat var="status" value="#{showUpdatedAction.statusUpdates}">
<h:panelGroup>
#{status.content}
<h:form>
<h:commandLink value="Like" action="#{statusAction.likeStatus(status.id,1)}" />
</h:form>
</h:panelGroup>
<ui:repeat>
#{status.content}
показывает правильные значения. Когда я печатаю идентификатор статуса с помощью #{status.id}
Это также дает правильное значение. Но когда я нажимаю на ссылку команды, переданное значение всегда равно 0 для status.id.
Может кто-нибудь сказать мне, почему это происходит и как я могу избежать этого?
Спасибо.
Редактировать 1
Интересно, что когда вместо передачи параметра в функцию я передаю его, используя <f:param>
работает отлично. Кто-нибудь может прокомментировать это?
3 ответа
Ваш код на странице JSF просто в порядке, только что проверил его... (сгенерировал bean-компоненты на моей стороне: showUpdatedAction, statusAction и простой класс Status)
public void likeStatus(String id,long someVal){
System.out.println(id+"___"+someVal);
}
который печатает идентификаторы просто отлично
id1___1
id4___1
Может быть, это связано с типом идентификатора или что-то с вашими бобами?
Я думаю, что вы должны попробовать использовать <c:forEach>
вместо <ui:repeat>
,
Я не могу сказать вам точно, почему status.id
0 в вашем случае, но вы можете напрямую передать все status
объект в вашем выражении EL. Вот так:
<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />
Тогда в вашем likeStatus
ты просто делаешь int statusId = status.getId()
или похожий, и у вас есть то, что вы хотите.
Как дополнение: использование <c:forEach>
на самом деле это просто запасной вариант, потому что люди говорят, что вы не должны смешивать JSTL с JSF по каким-либо причинам.