У меня есть проблемы с преобразованием этого кода из JSF 1.2 приложения эквивалента в JSF 2.x приложенияJsf RichFaces a4j: поддержка миграция в a4j: Аякс
<h:selectOneMenu id="type" value="#{bean.type}">
<f:selectItems value="#{bean.typeList}"/>
<a4j:support event="onchange"
ajaxSingle="false"
immediate="true"
reRender="myForm">
<a4j:actionparam name="type"
value="this.value"
assignTo="#{bean.type}"
noEscape="true"/>
</a4j:support>
</h:selectOneMenu>
Как это фрагмент коды работает.
В зависимости от выбранного значения в #{bean.type}
, на моей странице отображаются разные поля. При изменении пользователем поля "type"
вся форма повторно просматривается, но без проверки формы (ajaxSingle="false", immediate="true", reRender="myForm"
).
Я не хочу, чтобы проверить filds здесь, я просто хочу установить новое значение на #{bean.type}
и переписать страницу, чтобы показать разные поля (в зависимости от #{bean.type}
). Thats why i need to manualy #{bean.type}
внутри a4j:actionparam
.
Приятная особенность этого кода заключается в том, что отправленные значения в других файлах сохраняются после рендеринга.
Я пытаюсь сделать то же самое в JSF 2.x без успеха:
<h:selectOneMenu iid="type" value="#{bean.type}">
<f:selectItems value="#{bean.typeList}"/>
<a4j:ajax event="valueChange" render="@form" execute="@this"/>
</h:selectOneMenu>
Это:
<a4j:ajax event="valueChange" render="@form" execute="@this"/>
будет засавить всю форму и я потеряю занесено значение формы прочие поля
Этот:
<a4j:ajax event="valueChange" render="@form" execute="@form"/>
представит, проверять и повторно вызывать вся форма (я хочу просто представить без проверки, как в JSF 1,2)
Это:
<a4j:ajax event="valueChange" render="@form" execute="@form" immediate="true"/>
также не работает (работа же, как описано выше)
Итак, мой вопрос: как я могу добиться такого же поведения в JSF 2.x?
Благодарности
Поскольку у вас есть поля в форме, которую вы не хотите переизбывать, почему вы в первую очередь редерируете всю форму? – Makhiel
Makhiel Я хочу переписать всю форму, чтобы показать разные поля в зависимости от выбранного значения в поле типа. Некоторые файлы отображаются всегда, а некоторые - только для специальных типов (очень динамичные). И я хочу сохранить любые значения, введенные пользователем в любом поле, которое все еще отображается после реинжиниринга. – bary
Ну, рендеринг просто заменяет элементы, поэтому, если вы не сохраните значения локально, они будут потеряны. Разве это не будет лучше решено полностью на стороне клиента, скрывая/показывая поля с JavaScript? – Makhiel