How can I pass form input value to an Action (struts 1)

22,466

To access form values in a Struts 1 action, you need to cast ActionForm form to the type of form that the page uses, in your case MyForm. Then you can access its getters like normal. For example:

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    MyForm theForm = (MyForm) form;
    String name = theForm.getName();

    if (name == null || "".equals(name)) {
        // error case; name is required
        // do something
    }

    if(getErrors(request) == null ||getErrors(request).size() == 0)
        return mapping.findForward("success");
    else
        return mapping.getInputForward();

}

If the problem you're having is getting the values out of MyForm into the JSP page, and you truly cannot use taglibs*, then you can get the form like this:

<%
MyForm theForm = (MyForm) session.getAttribute("MyForm");
%>

Then insert it into the page like this:

<form class="form-horizontal" action="address.do" method="post">
    Name: <input type="text" value="<%= theForm.getName() %>" class="form-control" name="name"><br>
    City <input type="text" value="<%= theForm.getCity() %>" class="form-control" name="city"><br>
    Country: <input type="text" value="<%= theForm.getCountry() %>" class="form-control" name="country"><br>
    <button class="btn btn-success" type="submit">Submit</button>
</form>

BUT you probably can use taglibs and just don't know how to add css classes to them. In the taglibs, styleClass renders to class in the output html. Try this:

<html:form styleClass="form-horizontal" action="address.do" method="post">
    Name: <html:text styleClass="form-control" name="name" /><br>
    City <html:text styleClass="form-control" name="city" /><br>
    Country: <html:text styleClass="form-control" name="country" /><br>
    <button class="btn btn-success" type="submit">Submit</button>
</html:form>
Share:
22,466
Oscar MV
Author by

Oscar MV

Updated on July 05, 2022

Comments

  • Oscar MV
    Oscar MV almost 2 years

    I'm new using struts.

    I need to pass the form value to an action when I submit the form. I want to use input tag no html:text.

    How to do it?

    This is my code:

    form in JSP:

    <form class="form-horizontal" action="address.do" method="post">
        Name: <input type="text" class="form-control" name="name"><br>
        City <input type="text" class="form-control" name="city"><br>
        Country: <input type="text" class="form-control" name="country"><br>
        <button class="btn btn-success" type="submit">Submit</button>
    </form>
    

    struts-config.xml:

    <form-beans>
        <form-bean name="myFrom" type="com.form.MyForm"/>
    </form-beans>
    
    <global-forwards>
        <forward name="pagAddress" path="/address.do"/>
    </global-forwards>
    
    <action-mappings>
        <action path="/address"
                type="com.action.MainAction"
                name="myForm"            
                scope="request" 
                input="/addressInput.jsp" 
                validate="true">
            <forward name="success" path="/addressInput.jsp"/>
        </action>
    </action-mappings>
    

    ActionForm:

    public class MyForm extends ActionForm{
    
    private static final long serialVersionUID = -XXXXXXXXXXXXXXXXXXXX;
    private String name = "";
    private String city = "";
    private String country = "";
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    
    @Override
        public void reset(ActionMapping mapping, HttpServletRequest request) {
            this.name = null;
            this.city = null;
            this.country = null;
            super.reset(mapping, request);
        }
    
    }
    

    Action:

    public class MainAction extends Action {
    
       public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
            if(getErrors(request) == null ||getErrors(request).size() == 0)
                return mapping.findForward("success");
            else
                return mapping.getInputForward();
    
       }
    }
    
  • Euridice01
    Euridice01 about 5 years
    how do I do a post request using struts 1 without form data but rather a string that I want to send as url encoded?