Hi, I am quite new to Struts and have a problem with an Action and ActionForm. I am running Struts 1.0.1 and Tomcat 4.0.1, my IDE is JBuilder 6 Enterprise.
I have the problem, that all the properties of a form are empty. When running the program in the debugger I can see the following sequence of operations being executed: 1. Constructor of my FormBean 2. Reset method 3. Validate method All the setters are NOT called for whatever reason! Here the simple Java Code of my Form: public final class LogonForm extends ActionForm { private String mContainerName = ""; private String mUserName = ""; private String mPwd = ""; private String mAuthType = ""; public LogonForm() { System.out.println("Form created."); } public String getContainerName() { return mContainerName; } public void setContainerName(String ContName) { mContainerName = ContName; } public String getUserName() { return mUserName; } public void setUserName(String UserName) { mUserName = UserName; } public String getPassword() { return mPwd; } public void setPassword(String Password) { mPwd = Password; } public String getAuthType() { return mAuthType; } public void setAuthType(String AuthType) { mAuthType = AuthType; } public void reset(ActionMapping mapping, HttpServletRequest request) { mPwd = ""; mUserName = ""; mContainerName = ""; mAuthType = ""; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { System.out.println(mContainerName+ " " + mUserName); ActionErrors errors = new ActionErrors(); if ((mUserName == null) || (mUserName.length() < 1)) errors.add("username", new ActionError("error.username.required")); if ((mPwd == null) || (mPwd.length() < 1)) errors.add("password", new ActionError("error.password.required")); if ((mContainerName == null) || (mContainerName.length() < 1)) errors.add("containername", new ActionError("error.containername.required")); return errors; } } The HTML looks as follows: <form action=/Echnaton/authenticate.do METHOD=POST > <input type="Hidden" name="AuthType" value="WindowsNT" /> <table align="center" cellspacing="2" cellpadding="2" border="0"> <tr> <td rowspan="4"><img src="../Images/Logon.gif" width="192" height="146" border="0" alt=""></td> <td width="120" id="FormFont">NT Domain:</td> <td width="200" id="FormFont"><input type="text" name="ContainerName" value="" size="30" maxlength="16"></td> </tr> <tr> <td id="FormFont">Your User ID:</td> <td id="FormFont"><input type="text" name="UserName" value="" size="30" maxlength="20"></td> </tr> <tr> <td id="FormFont">Password:</td> <td id="FormFont"><input type="password" name="Password" value="" size="30" maxlength="20"></td> </tr> <tr> <td colspan="2" id="FormFont"> <input type="submit" value="Logon"> <input type="Reset" value="Clear"> </td> </tr> </table> </form> Here I must add, that this code is from a velocity macro, since I use Velocity instead of JSP as Template for my 'View' layer in the MVC architecture. The action is implemented as follows: public class authenticate extends EWCAction { public authenticate() { } public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Extract attributes we will need StringBuffer AuthError = new StringBuffer(256); Locale locale = getLocale(request); MessageResources messages = getResources(); // Validate the request parameters specified by the user ActionErrors errors = new ActionErrors(); String container = ((LogonForm)form).getContainerName(); String username = ((LogonForm)form).getUserName(); String password = ((LogonForm)form).getPassword(); String authtype = ((LogonForm)form).getAuthType(); EWCInit ei = (EWCInit)request.getSession().getServletContext().getAttribute("EWCInit"); String IOR = ei.getFactoryIOR(); // // do authentication // // .... do some CORBA processing here // Report any errors we have discovered back to the original form if (!errors.empty()) { saveErrors(request, errors); return (new ActionForward(mapping.getInput())); } // Forward control to the specified success URI return (new ActionForward("/startApp.jsp")); } boolean doNTAuthentication(HttpSession session, String IOR, String Container, String UserName, String Pwd, StringBuffer ErrMsg) { // .. a lot of CORBA Calls return ret; } } I have derived Action with my own action class which basically should check the sessionstatus whenever a call is made. It looks as follows: public class EWCAction extends Action { public EWCAction() { super(); } public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { HttpSession session = request.getSession(); ActionForward fwd = null; String AuthStatus = (String)session.getAttribute("AuthStatus"); if (AuthStatus != null) // session is OK { if (AuthStatus.equalsIgnoreCase("SUCCESS")) // user is authenticated return null; } else // user needs to login { fwd = new ActionForward("/Templates/LogonForm.vm"); return fwd; } return (super.perform(mapping, form, request, response)); } } In my web.xml file I do a mapping for all actions ending with do to the action servlet as follows: <servlet> <servlet-name>action</servlet-name> <display-name>action</display-name> <description>Standard action servlet for MVC architecture</description> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> My struts-config.xml file looks as follows: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> <struts-config><data-sources /> <!-- ========== Form Bean Definitions =================================== --> <form-beans type="org.apache.struts.action.ActionFormBean"> <form-bean name="LogonForm" type="ch.smartsol.EWC.forms.LogonForm" /> <form-bean name="ShowNTUserPropsForm" type="ch.smartsol.EWC.ShowNTUserPropsForm" /></form-beans> <!-- ========== Action Mapping Definitions ============================== --> <action-mappings type="org.apache.struts.action.ActionMapping"> <action path="/authenticate" type="ch.smartsol.EWC.actions.authenticate" name="LogonForm" scope="request" validate="true" input="/Templates/LogonForm.vm"> </action> <!-- The standard administrative actions available with Struts --> <!-- These would be either omitted or protected by security --> <!-- in a real application deployment --> <action path="/admin/addFormBean" type="org.apache.struts.actions.AddFormBeanAction" name="<none>" /> <action path="/admin/addForward" type="org.apache.struts.actions.AddForwardAction" /> <action path="/admin/addMapping" type="org.apache.struts.actions.AddMappingAction" /> <action path="/admin/reload" type="org.apache.struts.actions.ReloadAction" /> <action path="/admin/removeFormBean" type="org.apache.struts.actions.RemoveFormBeanAction" /> <action path="/admin/removeForward" type="org.apache.struts.actions.RemoveForwardAction" /> <action path="/admin/removeMapping" type="org.apache.struts.actions.RemoveMappingAction" /> </action-mappings> </struts-config> I have checked the names of my form tags with the names of my setter and getter functions and they are correct. (I assume that the HTML Form name UserName requires a setUserName() and getUserName() method in my Form Bean.) However I do absolutely NOT understand, why the set methods are NOT called. Can anybody give me a hint what I am doing wrong. In the debugger I can see the request object. It has the correct URL with all the parameters and correct values. Any help would be greatly appreciated. Thomas -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>