Jsf 2 获取记录的用户名。(JSF2)
我有一个会话范围的bean来管理我的用户登录,还有一个登录过滤器,但我不确定如何让另一个bean中的用户对象根据登录的用户显示某些数据 这是我的登录Bean:Jsf 2 获取记录的用户名。(JSF2),jsf-2,login,session-scope,Jsf 2,Login,Session Scope,我有一个会话范围的bean来管理我的用户登录,还有一个登录过滤器,但我不确定如何让另一个bean中的用户对象根据登录的用户显示某些数据 这是我的登录Bean: @ManagedBean(name="user") @SessionScoped public class LoginBean { private String username; private String password;
@ManagedBean(name="user")
@SessionScoped
public class LoginBean {
private String username;
private String password;
private UsuariosEntity current;
public LoginBean(){}
@EJB
UsuariosDAO userService=new UsuariosDAO();
public String login() {
try{
current = userService.buscar(username, password);
System.out.println(current.getUsuario());
}catch(Exception e){
}
if (current == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Unknown login, try again"));
return (username = password = null);
} else {
return "/Contenido/vistaProcesos?faces-redirect=true";
}
}
public String logout() {
System.out.println("logout");
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "/Login?faces-redirect=true";
}
public boolean isLoggedIn() {
return current != null;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UsuariosEntity getCurrent() {
return current;
}
}
登录筛选器:
@WebFilter("/Contenido/*")
public class FiltroLogin implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
LoginBean user = (LoginBean) req.getSession().getAttribute("user");
if (user != null && user.isLoggedIn()) {
// User is logged in, so just continue request.
chain.doFilter(request, response);
} else {
// User is not logged in, so redirect to index.
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/Login.jsf");
}
}
@Override
public void destroy() {
}
}
这就是我想做的:
@ManagedBean(name = "procesos")
@ViewScoped
public class ProcesosBean implements Serializable {
private List<VistaProcesosEntity> procesos;
@PostConstruct
public void init(){
//i want to fill procesos List with data, depending of the user who is logged on.
procesos=new ArrayList<VistaProcesosEntity>();
/* LoginBean user; // i dont know from where should i get the user object..
if (user.getCurrent().getTipo()=="Planta") {
procesos= Procesos.getALL();
}else if(user.getCurrent().getTipo()=="Exportadora"){
procesos=Procesos.getALLbyExportadora(user.getCurrent().getUsuario());
} else if (user.getCurrent().getTipo()=="Productor"){
procesos=Procesos.getALLbyProductor(user.getCurrent().getUsuario());
} else{
procesos= Procesos.getALL();
} */
}
public List<VistaProcesosEntity> getProcesos() {
return procesos;
}
@ManagedBean(name=“proceos”)
@视域
公共类processbean实现了可序列化{
私有列表程序;
@施工后
公共void init(){
//我想根据登录的用户,用数据填充procesos列表。
procesos=新的ArrayList();
/*LoginBean user;//我不知道从哪里获取用户对象。。
if(user.getCurrent().getTipo()==“Planta”){
procesos=procesos.getALL();
}else if(user.getCurrent().getTipo()=“Exportadora”){
proceos=proceos.getALLbyExportadora(user.getCurrent().getUsuario());
}else if(user.getCurrent().getTipo()=“Productor”){
procesos=procesos.getALLbyProductor(user.getCurrent().getUsuario());
}否则{
procesos=procesos.getALL();
} */
}
公共列表getproceos(){
返回过程;
}
@ManagedBean(name=“proceos”)
@视域
公共类processbean实现了可序列化{
@ManagedProperty(value=“#{user}”)//这引用@ManagedBean命名用户
私人洛根班洛根班;
私有列表程序;
@施工后
公共void init(){
UsariosEntity current=loginBean.getCurrent();
}
}
我已经扩展了您的processbean
一点。请注意引用的LoginBean
,并在init()
函数中检索UsariosEntity
。如果您还有任何问题或不清楚(足够),请询问。可能重复的@user1462933:是否打算使用普通的JSF支持bean?使用CDI确实会让您受益匪浅。如果您想了解更多信息:或者感谢Aquillo和Kolossus..我会查看链接。感谢您的帮助..但现在它给了我一个错误。。“com.sun.faces.mgbean.ManagedBeanCreationException:没有一个简单的定义来定义程序para el bean administrado procesos”在英语中表示类似无法为托管属性过程定义属性过程。好的,你能用更新版本的processbean
为此创建一个新问题吗?你可以在这里引用它,我很乐意为你提供帮助。尽管为了Stackoverflow及其问题的未来可读性,新问题会更好。-->新问题是:)
@ManagedBean(name = "procesos")
@ViewScoped
public class ProcesosBean implements Serializable {
@ManagedProperty(value="#{user}") // this references the @ManagedBean named user
private LoginBean loginBean;
private List<VistaProcesosEntity> procesos;
@PostConstruct
public void init(){
UsariosEntity current = loginBean.getCurrent();
}
}