2012-01-13 4 views
0

Ниже мой код:Значение не сохраняется для параметра действия, когда внутри Ui: повторить

<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.

Может кто-нибудь сказать мне, почему это происходит и как я могу избежать этого?

спасибо.

Edit 1

Интересно, когда вместо того, чтобы передать параметр в функции, я прохожу его с помощью <f:param>, она прекрасно работает. Может кто-нибудь прокомментировать это?

+0

Это должно сработать. Показать * наименьший возможный *, но * полный * вид (от '' до '') и код бонуса, который воспроизводит для вас именно эту проблему и, пожалуйста, укажите точный JSF impl/version и server impl/version. – BalusC

ответ

0

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

+0

Я тоже пробовал это, но его не работает. – Logan

0

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

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

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

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

+0

Когда я отправил весь объект статуса, я получил объект со всеми его значениями, установленными в null. – Logan

0

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

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

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

id1___1

id4___1

Может быть, его что-то делать с типом идентификатора или что-то с вашей фасолью?

+0

Я тоже пытался изменить тип, но он не работает для меня. – Logan

+0

попробуйте изменить JSF-реализацию jar, попробуйте mojarra 2.03 (это тот, который я попробовал) – Daniel

+0

Я использую ту же версию. – Logan