gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:10 24 4
gpt4 key购买 nike

我创建了一个使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com