I don't see anything that puts a user info into session (or request, I forgot where it was), so it makes sense the JSP would fail.
[OT] In the future, consider removing useless, empty comments so people trying to help have less work to do :) Dave On Wed, Jun 13, 2012 at 11:43 AM, Anjib Mulepati <anji...@hotmail.com>wrote: > 1. Base Class > public abstract class BaseAction extends org.apache.struts.action.**Action > { > > private static Log log = LogFactory.getLog("BaseAction"**); > > /** > * > * @param mapping > * @param form > * @param request > * @param response > * @return > * @throws IOException > * @throws ServletException > * @throws BusinessDelegateException > */ > @Override > public ActionForward execute(ActionMapping mapping, ActionForm form, > HttpServletRequest request, HttpServletResponse response) > throws IOException, ServletException, BusinessDelegateException > { > > if (!this.userIsLoggedIn(request)**) { > ActionErrors errors = new ActionErrors(); > errors.add("error", new ActionMessage("error.** > userNotLoggedIn")); > this.saveErrors(request, errors); > String url = request.getServletPath() + "?" + > request.getQueryString(); > request.getSession().**setAttribute("forwardPath", url); > return mapping.findForward("**sessionEnded"); > } > return executeAction(mapping, form, request, response); > } > > /** > * > * @param mapping > * @param form > * @param request > * @param response > * @return > * @throws IOException > * @throws ServletException > */ > protected abstract ActionForward executeAction(ActionMapping mapping, > ActionForm form, HttpServletRequest request, > HttpServletResponse response) > throws IOException, ServletException; > > private boolean userIsLoggedIn(**HttpServletRequest request) { > UserInfo userInfo = (UserInfo) request.getSession().** > getAttribute("userInfo"); > String userName = null; > try{ > userName = userInfo.getUserName(); > } catch (NullPointerException ex) { > log.error("User hasn't logged in yet."); > return false; > } > > if ( userName == null) { > return false; > } > return true; > } > } > > 2. Action class > public class ChangePasswordAction extends BaseAction { > > private static Log log = LogFactory.getLog("**ChangePasswordAction"); > > private static final String SUCCESS = "success"; > > private static final String FAILURE = "failure"; > > @Override > public ActionForward executeAction(ActionMapping mapping, ActionForm > form, > HttpServletRequest request, HttpServletResponse response) > throws IOException, ServletException { > > ActionErrors errors = new ActionErrors(); > ActionMessages messages = new ActionMessages(); > > ChangePasswordForm changePwdForm = (ChangePasswordForm) form; > String userName = changePwdForm.getUserName(); > String oldPassword = changePwdForm.getOldPwd().**trim(); > String newPassword = changePwdForm.getPassword().**trim(); > UserDelegate userDelegate = new UserDelegate(userName, null); > boolean isPasswordChanged = userDelegate.changePassword(**userName, > oldPassword, newPassword); > > if (isPasswordChanged) { > messages.add("password", new ActionMessage("msg.** > changePasswordSuccess")); > this.saveMessages(request, messages); > log.info("Password changed successfully."); > return mapping.findForward(SUCCESS); > } else { > errors.add("errors", new ActionMessage("msg.** > changePasswordError")); > saveErrors(request, errors); > log.error("Password can't be changed"); > return mapping.findForward(FAILURE); > } > } > } > > 3. Validation class > public class ChangePasswordForm extends ValidatorForm { > > private String userName; > private String oldPwd; > private String password; > private String confirmPwd; > > /** > * > * @return > */ > public String getPassword() { > return password; > } > > /** > * > * @param password > */ > public void setPassword(String password) { > this.password = password; > } > > /** > * > * @return > */ > public String getOldPwd() { > return oldPwd; > } > > /** > * > * @param oldPwd > */ > public void setOldPwd(String oldPwd) { > this.oldPwd = oldPwd; > } > > /** > * > * @return > */ > public String getConfirmPwd() { > return confirmPwd; > } > > /** > * > * @param confirmPwd > */ > public void setConfirmPwd(String confirmPwd) { > this.confirmPwd = confirmPwd; > } > > /** > * > * @return > */ > public String getUserName() { > return userName; > } > > /** > * > * @param userName > */ > public void setUserName(String userName) { > this.userName = userName; > } > > /** > * > */ > public ChangePasswordForm() { > super(); > > } > > /** > * This is the action called from the Struts framework. > * @param mapping The ActionMapping used to select this instance. > * @param request The HTTP Request we are processing. > * @return set of errors. > */ > @Override > public ActionErrors validate(ActionMapping mapping, HttpServletRequest > request) { > ActionErrors errors = new ActionErrors(); > if(userName.isEmpty()){ > errors.add("error", new ActionMessage("error.userName"**)); > } > if(oldPwd.isEmpty()){ > errors.add("error", new ActionMessage("error.**oldPassword")); > } > if(password.isEmpty()){ > errors.add("error", new ActionMessage("error.**newPassword")); > } > if(!confirmPwd.equals(**password)){ > errors.add("error", new ActionMessage("error.** > confirmPassword")); > } > if(userName.equalsIgnoreCase(**password)){ > errors.add("error", new ActionMessage("error.** > sameAsUsername")); > } > if(oldPwd.equalsIgnoreCase(**password)){ > errors.add("error", new ActionMessage("error.**samePassword")); > } > return errors; > } > > /** > * > * @param mapping > * @param request > */ > @Override > public void reset(ActionMapping mapping, HttpServletRequest request) { > userName = ""; > oldPwd = ""; > password = ""; > confirmPwd = ""; > } > } > > On 6/13/2012 11:10 AM, Jason Zheng wrote: > >> Anjib, would you like to show us the codes in the Action >> ChangePasswordAction? >> >> On Wed, Jun 13, 2012 at 10:58 PM, Dave Newton<davelnew...@gmail.com> >> wrote: >> >> Then it's likely you're doing something wrong if you're forwarding to a >>> page before creating the info that page needs. >>> >>> Dave >>> >>> On Wed, Jun 13, 2012 at 10:53 AM, Anjib Mulepati<anji...@hotmail.com >>> >>>> wrote: >>>> Even though I put validation in ActionForm validate() method failure >>>> will >>>> take to changePasswordPage. I do have validation to check form field. >>>> >>>> >>>> On 6/13/2012 9:17 AM, Dave Newton wrote: >>>> >>>> Maybe some sort of validation would be helpful. >>>>> >>>>> Dave >>>>> >>>>> On Wed, Jun 13, 2012 at 9:03 AM, Anjib Mulepati<anji...@hotmail.com> >>>>> wrote: >>>>> >>>>> Hi All, >>>>> >>>>>> I have question regarding handling form submission by direct URL in >>>>>> Struts >>>>>> 1.3.8 >>>>>> >>>>>> I have a page to change password which user can access after they >>>>>> >>>>> login. >>> >>>> URL for that page is http://localhost:8080/MyApp/**** >>>>>> **changepassword.do<http://localhost:8080/MyApp/****changepassword.do> >>>>>> >>>>> <http://localhost:8080/MyApp/****changepassword.do<http://localhost:8080/MyApp/**changepassword.do> >>> > >>> >>>> <http://**localhost:8080/**MyApp/**changepassword.do< >>>>>> >>>>> http://localhost:8080/MyApp/**changepassword.do<http://localhost:8080/MyApp/changepassword.do> >>> > >>> >>>> >>>>>> I have action mapping as follow: >>>>>> <action path="/changepassword" input="changePasswordPage" >>>>>> >>>>> scope="request" >>> >>>> name="ChangePasswordForm" type="com.anjib.actions.** >>>>>> >>>>>> ChangePasswordAction"> >>>>>> <forward name="success" path="changePasswordPage" /> >>>>>> <forward name="failure" path="changePasswordPage"/> >>>>>> </action> >>>>>> >>>>>> I have tile definition for changePasswordPage which have page like >>>>>> >>>>> header >>> >>>> which display welcome information after user login >>>>>> <div id="welcome" class="right"> >>>>>> <bean:message key="label.welcome" /> >>>>>> <logic:notEmpty name="userInfo" property="firstName"> >>>>>> ${userInfo.firstName} ${******userInfo.lastName} >>>>>> >>>>>> </logic:notEmpty> >>>>>> <logic:empty name="userInfo" property="firstName"> >>>>>> ${userInfo.userName} >>>>>> </logic:empty> >>>>>> </div> >>>>>> >>>>>> Now everything works fine if we follow normal process: Login and do >>>>>> actions. But if someone type URL http://localhost:8080/MyApp/** >>>>>> changepassword.do<http://****localhost:8080/MyApp/**** >>>>>> changepassword.do< >>>>>> >>>>> http://localhost:8080/MyApp/**changepassword.do<http://localhost:8080/MyApp/changepassword.do> >>> >>directly >>> >>>> then I don't get page and I have error in Tomcat log >>>>>> Caused by: javax.servlet.jsp.******JspException: Cannot find bean: >>>>>> "userInfo" >>>>>> >>>>>> in any scope >>>>>> >>>>>> Any help will be appreciated. >>>>>> >>>>>> Thanks, >>>>>> Anjib >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------******--------------------------**--** >>>>>> --**--------- >>>>>> To unsubscribe, e-mail: user-unsubscribe@struts.****apac**he.org< >>>>>> >>>>> http://apache.org> >>> >>>> <user-unsubscribe@**struts.**apache.org <http://struts.apache.org>< >>>>>> >>>>> user-unsubscribe@struts.**apache.org<user-unsubscr...@struts.apache.org> >>> > >>> >>>> For additional commands, e-mail: user-h...@struts.apache.org >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------****----------------------------** >>>> --**--------- >>>> To unsubscribe, e-mail: >>>> user-unsubscribe@struts.**apac**he.org<http://apache.org> >>>> < >>>> >>> user-unsubscribe@struts.**apache.org<user-unsubscr...@struts.apache.org> >>> > >>> >>>> For additional commands, e-mail: user-h...@struts.apache.org >>>> >>>> >>>> >> >> > > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > user-unsubscribe@struts.**apache.org<user-unsubscr...@struts.apache.org> > For additional commands, e-mail: user-h...@struts.apache.org > >