Значение не сохраняется для параметра действия, когда он внутри интерфейса: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 по каким-либо причинам.

Другие вопросы по тегам