jsf отправляет значение selectOneMenu как управляемый компонент прямого запроса

У меня есть selectOneMenu, который управляет отношением между двумя объектами A и B. Где A фиксировано, а B можно выбрать через меню.
При отправке формы B отправляется в bean-компонент для дальнейшей обработки (создание и сохранение объекта отношения AToB) .

Не работает дело!

<h:selectOneMenu value=#{b}>
    <!-- b items from bean -->
</h:selectOneMenu>
<h:commandButton action="#{bean.addBToSelA(b)}"/>

<managed-bean>
    <description>B Entity Request Bean</description>
    <managed-bean-name>b</managed-bean-name>
    <managed-bean-class>B</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Рабочий случай!

Но если значение selectOneMenu является вложенным свойством другого управляемого компонента, оно работает. (например, AToB)

<h:selectOneMenu value=#{aToB.b}>
    <!-- b items from bean -->
</h:selectOneMenu>
<h:commandButton action="#{bean.addBToSelA(aToB.b)}"/>

<managed-bean>
    <description>AToB Entity Request Bean</description>
    <managed-bean-name>aToB</managed-bean-name>
    <managed-bean-class>AToB</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Примечание. Достаточно, если мой «b» является просто свойством другого управляемого компонента запроса.

Может кто-нибудь быть таким добрым и объяснить, почему?


person djmj    schedule 18.02.2012    source источник


Ответы (1)


Поскольку JSF уже создал экземпляр компонента заранее. Оно не будет переопределено значением модели, если экземпляр уже существует в области видимости. Удалите <managed-bean> из faces-config.xml и все заработает.


Не связанный с конкретной проблемой, похоже, вы уже используете JSF 2.x. Зачем придерживаться старой конфигурации faces-config.xml в стиле JSF 1.x? Просто используйте аннотацию @ManagedBean (конечно, только для реальных классов поддерживающих компонентов).

person BalusC    schedule 18.02.2012
comment
Спасибо за ваш ответ, проверим это позже. Эти объекты области запроса - это просто Pojo из Hibernate без каких-либо аннотаций. Они извлекаются из EAR и передаются его клиентам (в будущем). Я думал, что таким образом я могу сделать его независимым и индивидуальным для каждого клиента, если это необходимо. Если аннотации специфичны для приложения/проекта и наверняка не будут использоваться повторно, я не против вставить их в исходный код. Но все же у каждого есть плюсы и минусы. - person djmj; 18.02.2012
comment
Я не могу удалить его, потому что у меня есть другая форма, в которую я могу добавлять новые объекты B со свойствами, введенными пользователем. Так что мне просто нужно переименовать его. - person djmj; 18.02.2012