2010-09-16 2 views
1

мой код Xhtml:JSF2 игнорирует Действие attribut

<h:commandLink action="#{detailController.updateProject}" class="positive" > 
<h:graphicImage library="img" name="tick.png" alt=""/> 
<h:outputText value="Save" /> 
</h:commandLink> 

Это действие (updateProject()) не вызывается из рамок JSF! Даже если я удалю его в managedBean, никакого исключения не будет.

Есть ли у кого-нибудь проблемы такие проблемы? Я даже не могу объяснить это ... Я имею в виду, что это действие есть!


ADD: Да, это тег h: form! Но у меня есть две формы в этой точке зрения! Может быть, проблема?


ADD2: Я должен также упомянуть, что если я нажму кнопку, он вернет меня к предыдущему виду! Поэтому мой метод действия игнорируется, и вместо этого он открывает другое представление?!?!

Чтобы предоставить больше информации, моя страница построена так:

panelGroup name=show rendered=!controller.edit 
    form 
    buttons 
    outputtext 
    /form 
/panelGroup 

panelGroup name=edit rendered=controller.edit 
    form 
    buttons 
    inputText 
    /form 
/panelGroup 

Так у меня есть и, редактировать и шоу одного объекта в одном файле! Но только кнопки в нижней форме показывают это странное поведение (см. Выше).


Ответ BalusC: 1. Я использую две формы (! Они не являются вложенными) 2. В нижней форме я уже разместил ах: сообщения Я собираюсь попробовать положить мой контроллер в viewScop для проверки 3 и 4 я не знаю, как проверить 5. Спасибо за это ..

ответ

3

Просто быстрый вопрос: это ваше <h:commandLink> вложен в <h:form>?

Если это не так, вы должны указать 0: : введите ссылку на команду внутри элемента формы, иначе это не сработает.

Просто для упрощения кода, вы можете использовать атрибут value вместо добавления <h:outputText> компонента:

<h:commandLink action="#{detailController.updateProject}" class="positive" value="Save"> 
    <h:graphicImage library="img" name="tick.png" alt=""/> 
</h:commandLink> 
+0

+1 это мой ответ тоже. –

5

Это может иметь много возможных причин. @romaintaz упомянул только самый очевидный (самая распространенная ошибка начинающего): UICommand компоненты должны быть размещены внутри компонента UIForm.

Есть однако несколько причин:

  1. У вас есть несколько вложенных форм. Это незаконно в HTML. Поведение зависит от используемого веб-браузера, но обычно кнопка ничего не сделает. Вы не можете встраивать формы, но вы можете использовать их параллельно.

  2. Произошла ошибка проверки или преобразования, которая не была обнаружена h:message. Обычно это записывается в stdout, но вы также можете использовать h:messages, чтобы получить их все.

  3. UICommand компонент был помещен внутри UIData компонента (например, h:dataTable), чьи value не были сохранены в правильном направлении во время последующего запроса. Если JSF не может найти связанную строку данных, действие не будет вызываться. Помещение боба в view сфера должна многое помочь.

  4. Компонент или его один из родителей имеет атрибут rendered или disabled, который оценил false во время фазы запроса запроса. Тогда JSF не будет вызывать действие. Помещение боба в view сфера должна многое помочь.

  5. Некоторые PhaseListener, EventListener, Filter или Servlet в цепочке запрос-ответ изменил жизненный цикл JSF, чтобы пропустить фазу Invoke действий или изменены параметры запроса так, что JSF не может ссылаться на действие.

0

К сожалению, я не знаю, где были мисты. Я предполагаю, что это был неправильный мой код JSF.

Я решил эту проблему, упростив свой код. С этой страницы xhtml и одного контроллера я сделал 3 xhtml-pages и 3 Controller. После рефакторинга все, что мой код выглядит гораздо проще, и теперь работает :-)

Благодарим Вас за полезные предложения

Смежные вопросы