java - 在托管 bean : 中使用 spring 进行注入(inject)

标签 java spring jsf

我创建了一个使用 JSF 和托管 bean 的简单应用程序。我尝试从托管 bean 实例化一个将数据存储到数据库的 spring bean。但是,“@Autowired”注释似乎不起作用,因为我得到了 nullPointerExcpetion:

javax.faces.el.E​​valuationException:java.lang.NullPointerException

当调用authenticationComponent.authenticate()方法时出现问题

rmq:我测试了ClientService的方法,一切正常

托管 bean:

@ManagedBean(name="authenticationComponent")
@RequestScoped
public class AuthenticationComponent implements Serializable {

    private static final long serialVersionUID = -5085727127290746426L;
    private static final String SUCCESS = "success";
    private static final String ERROR = "error";

    @Autowired
    ClientService clientService;
    Client client;
    String clientName;
    String clientPass;
    public String authenticate() {

        client = clientService.authenticate(clientName, clientPass);
        if (client != null) {
            return SUCCESS;
        }
        return ERROR;

    }

身份验证.xhtml

              <p:inputText id="userName"  required="true"
                  label="User Name" title="Enter Your Name !" value="#{authenticationComponent.clientName}"/>
              <p:tooltip for="userName" styleClass="tooltip" showEvent="focus"
                  hideEvent="blur" />

              <h:panelGroup>
                  <h:outputText value="User Password : " />
                  <h:outputText style="color:red" value="* " />
              </h:panelGroup>

              <p:inputText id="userPass"  required="true"
                  label="User Password" title="Enter Your Password !" value="#{authenticationComponent.clientPass}" />
                  <!-- 
                          label option is needed for messages component
                   -->
              <p:tooltip for="userPass" styleClass="tooltip" showEvent="focus"
                  hideEvent="blur" />

              <p:commandButton id="submitLoginButton"
                  update="loginPanelGrid,messages" value="Sign In"
                  icon="ui-icon-check" action="#{authenticationComponent.authenticate()}" />
              <p:commandButton id="newUserButton"
                  update="loginPanelGrid,messages" value="Sign Up"
                  icon="ui-icon-plus"  />

应用程序上下文:

    <bean id="clientService" class="com.webapp.service.ClientServiceImpl">
            <property name="clientDao" ref="clientDao" />
        </bean>
 <bean id="genericDao" class="com.webapp.dao.GenericDaoImpl" abstract="true" >
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="clientDao" class="com.webapp.dao.ClientDaoImpl" parent="genericDao">
        <constructor-arg ref="client"  />
   </bean>

  <bean id="client" class="com.webapp.model.Client"/>

最佳答案

首先,您的 faces-config.xml 文件中需要一个自定义 el-resolver:

 <application>
        <!-- For DI of beans from Spring WebApplicationContext -->
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

然后您将需要使用注释@ManagedProperty,如下所示:

@ManagedProperty(value = "#{clientService}")
ClientService clientService;

因此 spring el-resolver 可以通过名称注入(inject)您的服务 bean。

关于java - 在托管 bean : 中使用 spring 进行注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17396263/

相关文章:

java - Eclipse/Spring/Tomcat 6 的奇怪字符编码问题

java - 如何使用 PagingAndSortingRepository 不返回特定列

java - @ConfigurationProperties 注解的警告

java - selenium 服务器在 firefox 中启动两个测试执行选项卡

java - 热敏收据打印机自动剪切问题

Java-无法打开pom.xml(maven)Ubuntu 16.04

java - 使用 hibernate 编辑/更新用户角色关系

java - Hibernate 在更新时添加 OneToMany 实体两次

jsf - 如何设置h :selectOneRadio button的默认值

css - primefaces 切换(命令)按钮