【发布时间】:2012-07-30 07:31:27
【问题描述】:
我正在使用 Hibernate、Struts 2 和 Spring 开发一个项目,但我的问题在于 Struts。
我创建了 3 个扩展 ActionSupport 的类,并且正在为所有这些类中的同一个类实现 ModelDriven。我已经实现了一些在调用动作时要执行的方法。
类的结构是这样的
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();
}
}
在struts.xml 中,我使用下一个结构创建了 3 个动作
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>
除此之外,我还有一个 JSP,其中有 3 个按钮引用不同的 Struts 动作,还有几个字段代表 3 个动作类中使用的模型驱动类的字段,以及 <s:push> 标记内的所有字段。
问题是当我填充字段时,单击任何按钮后,字段中的数据都丢失了。
我试图删除从验证中排除方法的 3 条 Struts 行,但不是字段为空,而是在我第二次按下同一个按钮时,他返回一个输入并重定向到 input.jsp。
下一个代码来自success.jsp,即起始页:
success.jsp:
<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>
我不知道这是否是正确的方法,但是当我只使用一个实现ModelDriven 的类并且这个类具有所有 3 种方法时,我让它工作了。
我只是在尝试这种方式,因为我想让我的代码清晰,并且不要在一个类中包含所有方法。
【问题讨论】:
标签: java jsp struts model-driven struts-action