我在 jsf 2.1 中有一个应用程序,其中登录通过休眠存储在数据库(postgresql)中,我的应用程序是在 spring 中制作的,使用 spring security 我可以成功登录:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="customUserDetailsService">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
问题是当我想显示有关登录应用程序的用户的信息时,在 jsf 中我可以通过 EL(表达式语言)显示名称:
#{request.userPrincipal.name}
但我想显示数据库中的其他信息存储,我使用休眠方法:
public Users getUser(String login) {
List<Users> userList = new ArrayList<Users>();
Query query = openSession().createQuery("from Users u where u.login = :login");
query.setParameter("login", login);
userList = query.list();
if (userList.size() > 0)
return userList.get(0);
else
return null;
}
我通过 jsf bean 调用它,如下所示:
@Component
@Scope("session")
public class UsersBean {
private String login;
private String name_user;
private String pass;
private HabilitacionVehicular_InscripcionFacade habilitacionVehicular_InscripcionFacade;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getName_user() {
return name_user;
}
public void setName_user(String name_user) {
this.name_user = name_user;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public Users showUser(String login) throws DataAccessException, EntityNotFoundException{
return habilitacionVehicular_InscripcionFacade.getUser(login);
}
但我无法在应用程序中显示它
<h:dataTable value="#{usersBean.showvUser()}" var="c"
styleClass="order-table" headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row">
<h:column>
<f:facet name="header">
Customer ID
</f:facet>
#{c.login}
</h:column>
这给了我错误:
Error: /WEB-INF/flows/main/main.xhtml @24,58 value="#{usersBean.showvUser()}": Method showvUser not found
如果我将 EL 和方法结合起来:
Error: /WEB-INF/flows/main/main.xhtml @24,58 value="#{usersBean.showvUser(#{request.userPrincipal.name})}" Failed to parse the expression [#{usersBean.showvUser(#{request.userPrincipal.name})}]