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


person Logan    schedule 13.01.2012    source источник
comment
Это должно работать. Покажите наименьшее возможное, но полное представление (от <html> до </html>) и код bean-компонента, который воспроизводит для вас именно эту проблему, и, пожалуйста, укажите точную реализацию/версию JSF и реализацию сервера/ используемая версия.   -  person BalusC    schedule 13.01.2012


Ответы (3)


Я думаю, вам следует попробовать использовать <c:forEach> вместо <ui:repeat>.

person Mr.J4mes    schedule 13.01.2012

Я не могу точно сказать, почему status.id в вашем случае равно 0, но вы можете напрямую передать весь объект status в своем выражении EL. Вот так:

<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />

Затем в своем likeStatus вы просто выполняете int statusId = status.getId() или подобное, и у вас есть то, что вы хотите.

В качестве дополнения: использование <c:forEach> на самом деле должно быть просто запасным вариантом, потому что люди говорят, что вы не должны смешивать JSTL с JSF по каким-либо причинам.

person Sebastian Wramba    schedule 13.01.2012
comment
Когда я отправил весь объект состояния, я получил объект со всеми его значениями, равными нулю. - person Logan; 16.01.2012

Ваш код на странице JSF в порядке, только что проверил... (также сгенерировал bean-компоненты на моей стороне: showUpdatedAction, statusAction и простой класс Status)

public void likeStatus(String id,long someVal){
    System.out.println(id+"___"+someVal);
}

который печатает идентификаторы просто отлично

id1___1

id4___1

Может быть, это как-то связано с типом идентификатора или с вашими бобами?

person Daniel    schedule 13.01.2012
comment
Я тоже пытался изменить тип, но это не работает для меня. - person Logan; 16.01.2012
comment
попробуйте изменить jar реализации JSF, попробуйте mojarra 2.03 (это тот, который я пробовал) - person Daniel; 16.01.2012
comment
не знаю, что это может быть, но если вы хотите, я могу отправить вам свой небольшой проект, в котором я заставил его работать, так что, надеюсь, вы сможете найти проблему... Или, может быть, сгенерировать 2 bean-компонента + 1 класс с минимальным кодом и посмотреть если это работает хорошо для вас - person Daniel; 18.01.2012