You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Aaron Bartell <aa...@gmail.com> on 2005/02/03 04:29:00 UTC
Critique implementation of managed bean access
Hey all you great minds! I have found a comfortable way to access other
managed-bean's in a session and I would like to know if it is a good
implementation. Here is a LoginController class that act's as both a
POJO and also allows you to retrieve the same named session object from
the faces configuration using static methods. Before using this
approach I was up in arms on where to put methods like
LoginController.loggedIn(). I am sure others have done something similar
to this and I am not the first, but I would still like input on whether
it is good or bad.
Thoughts?
Aaron Bartell
-----faces-config.xml entry-----
<managed-bean>
<managed-bean-name>LoginCtl</managed-bean-name>
<managed-bean-class>com.mowyourlawn.controller.LoginController</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
-----Usage Examples-----
userid = LoginController.user().getUid();
...
LoginController.loggedIn(Boolean.FALSE);
...
if(!LoginController.loggedIn().booleanValue()){
// go to login.jsp
}
-----LoginController Class-----
package com.mowyourlawn.controller;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import com.mowyourlawn.dao.User;
import com.mowyourlawn.util.Const;
public class LoginController {
private User user = new User();
Boolean loggedIn = new Boolean(false);
public LoginController() {
}
public static User user() {
FacesContext fc = FacesContext.getCurrentInstance();
return (User)
fc.getApplication().createValueBinding("#{LoginCtl.user}").getValue(fc);
}
public static Boolean loggedIn() {
FacesContext fc = FacesContext.getCurrentInstance();
return (Boolean)
fc.getApplication().createValueBinding("#{LoginCtl.loggedIn}").getValue(fc);
}
public static void loggedIn(Boolean x) {
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().createValueBinding("#{LoginCtl.loggedIn}").setValue(fc,
x);
return;
}
public String validLogin() {
if (LoginController.user().validLogin()) {
LoginController.loggedIn(Boolean.TRUE);
return "success";
}
LoginController.loggedIn(Boolean.FALSE);
FacesContext fc = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage("You have entered
an invalid user name and/or password.");
fc.addMessage("loginform", facesMessage);
return "failure";
}
public String logout() {
LoginController.loggedIn(Boolean.FALSE);
FacesContext fc = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage("You have been
logged out of the system.");
fc.addMessage("loginForm", facesMessage);
return "logout";
}
public boolean getAdminAccess() {
if (LoginController.user().getAccesslevel().intValue() ==
Const.AL_ADMIN.intValue()
|| LoginController.user().getAccesslevel().intValue() ==
Const.AL_OPERATOR.intValue()) return true;
return false;
}
public User getUser() {
return user;
}
public void setUser(User usr) {
this.user = usr;
}
public Boolean getLoggedIn() {
return loggedIn;
}
public void setLoggedIn(Boolean loggedIn) {
this.loggedIn = loggedIn;
}
}
Re: Critique implementation of managed bean access
Posted by Sean Schofield <se...@gmail.com>.
Aaron,
If you are after a reference to the LoginController, you could try this:
VariableResolver vr =
FacesContext.getCurrentInstance().getApplication().getVariableResolver();
LoginController lc =
(LoginController)vr.resolveVariable(FacesContext.getCurrentInstance(),
"LoginCtl");
This is simpler than creating a value binding. It will use the whole
managed bean deal to create the bean if it doesn't exist, etc.
sean
On Wed, 02 Feb 2005 21:29:00 -0600, Aaron Bartell
<aa...@gmail.com> wrote:
> Hey all you great minds! I have found a comfortable way to access other
> managed-bean's in a session and I would like to know if it is a good
> implementation. Here is a LoginController class that act's as both a
> POJO and also allows you to retrieve the same named session object from
> the faces configuration using static methods. Before using this
> approach I was up in arms on where to put methods like
> LoginController.loggedIn(). I am sure others have done something similar
> to this and I am not the first, but I would still like input on whether
> it is good or bad.
>
> Thoughts?
> Aaron Bartell
>
> -----faces-config.xml entry-----
> <managed-bean>
> <managed-bean-name>LoginCtl</managed-bean-name>
>
> <managed-bean-class>com.mowyourlawn.controller.LoginController</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> </managed-bean>
>
> -----Usage Examples-----
>
> userid = LoginController.user().getUid();
> ...
> LoginController.loggedIn(Boolean.FALSE);
> ...
> if(!LoginController.loggedIn().booleanValue()){
> // go to login.jsp
> }
>
> -----LoginController Class-----
>
> package com.mowyourlawn.controller;
>
> import javax.faces.application.FacesMessage;
> import javax.faces.context.FacesContext;
>
> import com.mowyourlawn.dao.User;
> import com.mowyourlawn.util.Const;
>
> public class LoginController {
>
> private User user = new User();
> Boolean loggedIn = new Boolean(false);
>
> public LoginController() {
> }
>
> public static User user() {
> FacesContext fc = FacesContext.getCurrentInstance();
> return (User)
> fc.getApplication().createValueBinding("#{LoginCtl.user}").getValue(fc);
> }
>
> public static Boolean loggedIn() {
> FacesContext fc = FacesContext.getCurrentInstance();
> return (Boolean)
> fc.getApplication().createValueBinding("#{LoginCtl.loggedIn}").getValue(fc);
> }
>
> public static void loggedIn(Boolean x) {
> FacesContext fc = FacesContext.getCurrentInstance();
>
> fc.getApplication().createValueBinding("#{LoginCtl.loggedIn}").setValue(fc,
> x);
> return;
> }
>
> public String validLogin() {
> if (LoginController.user().validLogin()) {
> LoginController.loggedIn(Boolean.TRUE);
> return "success";
> }
> LoginController.loggedIn(Boolean.FALSE);
> FacesContext fc = FacesContext.getCurrentInstance();
> FacesMessage facesMessage = new FacesMessage("You have entered
> an invalid user name and/or password.");
> fc.addMessage("loginform", facesMessage);
> return "failure";
> }
>
> public String logout() {
> LoginController.loggedIn(Boolean.FALSE);
> FacesContext fc = FacesContext.getCurrentInstance();
> FacesMessage facesMessage = new FacesMessage("You have been
> logged out of the system.");
> fc.addMessage("loginForm", facesMessage);
> return "logout";
> }
>
> public boolean getAdminAccess() {
> if (LoginController.user().getAccesslevel().intValue() ==
> Const.AL_ADMIN.intValue()
> || LoginController.user().getAccesslevel().intValue() ==
> Const.AL_OPERATOR.intValue()) return true;
> return false;
> }
>
> public User getUser() {
> return user;
> }
>
> public void setUser(User usr) {
> this.user = usr;
> }
>
> public Boolean getLoggedIn() {
> return loggedIn;
> }
>
> public void setLoggedIn(Boolean loggedIn) {
> this.loggedIn = loggedIn;
> }
> }
>
>