Другая причина того, что командная кнопка не была вызвана, заключается в том, что атрибут rendered
кнопки или одного из ее родителей оценивается false
на этапе применения значений запроса формы отправки.
У вас фактически нет ни одного, но эти <c:if>
теги делают то же самое, только во время построения представления вместо времени визуализации представления. Параметры вида не применяются при построении вида, а только после этого. Именно поэтому #{userDetailBean.view}
всегда пусто.
Я никогда не использовал такую конструкцию с <c:if>
, но у меня были подобные представления, подобные этой, где все это работает только с бином @ViewScoped
, где свойство рендеринга применяется к полноценному компоненту JSF вместо <c:if>
.
В качестве первого шага избавьтесь от <c:if>
s и перенесите их тесты в атрибут rendered
тех <h:form>
s, которые они упаковывают:
<h:form rendered="#{empty userDetailBean.view}">
...
</h:form>
<h:form rendered="#{not empty userDetailBean.view}">
...
</h:form>
Если напрасно (я полагаю, что это не удастся, потому что вы не используете ajax и viewparams не сохраняются), и бин действительно @RequestScoped
, тогда вам нужно пометить его @ViewScoped
, чтобы сохранить условия рендеринга .
Смежные вопросы:
Вне зависимости от проблемы, я бы предпочел использовать <h:panelGroup />
вместо <h:inputHidden />
, чтобы «заполнить» пустые ячейки таблицы. Они дешевле кодируются и декодируются, а также заканчиваются лучшим HTML.