ModelDriven on struts 2

早过忘川 提交于 2019-12-23 03:28:30

问题



I am developing a project using hibernate, struts2 and spring, but my problems are with struts.
I have created 3 classes extending ActionSupport and are implementing modeldriven for the same class in all of them. I have implemented some methods to be executed when the actions are called.
The structure for the classes is like (Class1Action.java):

public class Class1Action extends ActionSupport implements ModelDriven<ModelDrivenClass> {

     private ModelDrivenClass modelDrivenClass;


     // getter and setter for modelDrivenClass

     public String methodName() {

     System.out.println("Entrou!");

        return SUCCESS;

    }

    @Override
    public Sensor getModel() {
        return getSensor();
    }

}

On struts.xml I have created 3 action using the next structure (struts.xml):

<action name="actionName1" method="methodName" class="Class1Action">
   <interceptor-ref name="validation">
      <param name="excludeMethods">methodName</param>
   </interceptor-ref>
   <result name="success" >success.jsp</result>
   <result name="input" >input.jsp</result>
</action>

Besides that I have a JSP with 3 buttons referring the different struts actions, and several fields that represents fields from the model driven class used in the 3 action classes, and all of the fields inside a <s:push> tag. The problem is when I am populating the fields and just after click on any of the buttons, data in the fields are missing. I have tried to remove the 3 struts lines that excludes the methods from validation, but instead of the fields are being empty, at the second time I have pressed the same button he returns an input and redirects to input.jsp.
The next code is from success.jsp, that is the starting page:

<form method="post" >


    <s:push value="modelDrivenClass">

        <s:textfield label="FieldLabel1" name="modelDrivenClassAttribute1" />
        <s:textfield label="FieldLabel2" name="modelDrivenClassAttribute2" />
        <s:textfield label="FieldLabel3" name="modelDrivenClassAttribute3" />
        <s:textfield label="FieldLabel4" name="modelDrivenClassAttribute4" />
        <s:textfield label="FieldLabel5" name="modelDrivenClassAttribute5" />

    </s:push>


<s:submit action="actionName1" name="Submit1" value="Submit1" />
<s:submit action="actionName2" name="Submit2" value="Submit2" />
<s:submit action="actionName3" name="Submit3" value="Submit3" />
</form>

I don't know if is this the right way to do it, but I made it work when I used only one class implementing modeldriven and this class has all the 3 methods. I am just trying this way because I would like to let my code clear and don't have all methods in only one class.


回答1:


An approach with model driven action class is very useful if you are migrating old Struts code to a new one, so it simplifies a concept of form bean. And in the newer Struts 2 isn't necessary to use ModelDriven if you can use the action bean from the top of the value stack and model associated within just prefixed to its name.

Note, that when overriding interceptors configuration in the action config the defaultStack disappears. So, better to create your own stack or reference at least basicStack to make sure necessary interceptors are invoked. In your case a modelDriven interceptor.

If you use this interceptor on the stack it pushes the model in front of the action, so you don't need to s:push it in the result.

The model object should be initialized to the instance of he model class and returned by the getter of the model. Also consider using a visitor validator when validation fields of a model.

Having three actions that share a data between calls requires preparing a model using Preparable to populate fields from session or use a session object reference to provide default values for fields to keep them saved.

Note, using prepare requires changing the order of interceptors call to push the model before it's populated.



来源:https://stackoverflow.com/questions/11758643/modeldriven-on-struts-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!