@Autowired bean-компонент null в JSF ManagedBean с конфигурацией Spring xml - PullRequest
0 голосов
/ 12 октября 2018

Я использую конфигурацию xml для объявления своего бина UserDao и вызываю его в другой компонент: AuthenticationFacade (объявленный аннотацией @Component), используя аннотацию @Autowired, например:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

<context:annotation-config />
<context:component-scan base-package="com.medkhelifi.tutorials.todolist"/>
<import resource="classpath:/conf/applicationContext-db.xml"/>
<import resource="classpath:/conf/applicationContext-security.xml"/>
</beans>

applicationContext-db.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd
                    http://www.springframework.org/schema/aop
                    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<!--.....-->
<!--        DAO BEANS                       -->
<bean id="userDao" class="com.medkhelifi.tutorials.todolist.models.dao.impl.UserDaoImp">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--....->
</beans>

AuthenticationFacade.java

package com.medkhelifi.tutorials.todolist.components;

import com.medkhelifi.tutorials.todolist.models.dao.UserDao;
import com.medkhelifi.tutorials.todolist.models.entities.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import javax.faces.bean.ManagedBean;

@Component
@ManagedBean
@Scope("session")
public class AuthenticationFacade implements IAuthenticationFacade {

    @Autowired
    private UserDao userDao;

public Authentication getAuthentication() {
    return SecurityContextHolder.getContext().getAuthentication();
}

public User getAuthenticatedFacade() {
    Authentication authentication = getAuthentication();
    User user = userDao.findByUsername(authentication.getName());

    return user;
}
}

С этой конфигурацией я получаю userDao как ноль, я не знаю, пропустил ли я что-то.

Здесь я использую свой AuthenticationFacade managedBean:

index.xhtml

<h:body>
    <ui:composition template="templates/layout.xhtml">
        <ui:define name="content">
            <b:row>
                <b:navBar brand="Brand" brandHref="#" fluid="true">
                  <!-- Following line is needed for TBS 3.0.1 (panel content overflow issue) -->
                <b:navbarLinks pull="right"><b:navLink value="    " href="#"></b:navLink></b:navbarLinks>
                    <b:navbarLinks pull="right" styleClass="hidden-xs">
                        <b:dropMenu value="#{authenticationFacade.getAuthenticatedFacade().firstname}">
                            <b:navLink value="logout" href="#"></b:navLink>
                        </b:dropMenu>
                    </b:navbarLinks>
                </b:navBar>
            </b:row>

        </ui:define>
    </ui:composition>
</h:body>

1 Ответ

0 голосов
/ 13 октября 2018

После нескольких часов поиска я обнаружил, где я запутался: я забыл добавить SpringBeanFacesELResolver в мой Face-config.xml.

Face-config.xml

<application>
    <!-- I forgot to add this resolver to my faces-config.xml -->
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
 </application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...