У меня есть веб-приложение, в котором используется Primefaces. Я привязываю некоторые компоненты Facelet к полям типа UIComponent в моих резервных управляемых компонентах. Что-то вроде этого:
<p:panel id="loginPanel"
rendered="false"
binding="#{loginBean.loginPanel}"
style="border: none">
И никаких дополнительных аннотаций в бине вот так:
@ManagedBean
public class LoginBean {
String name;
String password;
UIComponent loginPanel;
//...}
Я решил использовать Spring Security для управления аутентификацией. Итак, я реализовал
UserDetailsService
интерфейс, указанная реализация в конфигурации безопасности spring для внедрения в мой управляемый компонент:
<!-- Set MemberDetailsService class as the authentication Manager -->
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="memberDetailsService">
<sec:password-encoder hash="plaintext"/>
</sec:authentication-provider>
</sec:authentication-manager>
<!-- Inject authentication Manager to our LoginBean -->
<beans:bean id="loginBean" name="loginBean" class="com.mycompany.managed.LoginBean" scope="prototype">
<beans:property name="authenticationManager" ref="authenticationManager"/>
</beans:bean>
Я также добавил фильтры и слушатели Spring в web.xml — ничего особенного. Я ожидал этого, аннотируя свое новое поле в LoginBean, например:
@ManagedProperty("#{authenticationManager}")
AuthenticationManager authenticationManager;
работа будет сделана. Но AuthenticationManager не был внедрен во время выполнения, что привело к исключению NullPointerException. Я использовал это solution< /а>
и создал faces-config.xml всего лишь:
<!-- Enable Spring -->
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
Аутентификация теперь работает нормально. Проблема в том, что привязка UIComponent больше не работает. Поле UIComponent в моем LoginBean имеет значение null во время выполнения. Bean-компоненты, которые имеют привязки, но не вводят управляемые свойства, не имеют этой проблемы. Что здесь происходит? Я не очень понимаю связь...
Спасибо.
UIComponent loginPanel= new Panel();
? - person kolossus   schedule 11.05.2015