Struts问题;使用相同的动作来显示和提交

时间:2010-11-01 14:38:22

标签: java struts

这是情况。

我有一个名为param.jsp的页面,它只有一个表单和一个提交按钮。数据库中有一条记录,当表单呈现时我想用该记录填充表单。提交表单时,我想更新该单个记录并返回到同一页面。在struts中执行此操作的最佳方法是什么?

到目前为止,我已经想出了这个;这是行动:

class MyAction extends DispatchAction{
    public ActionForward savePlatinumJLParam(......){
         //<insert the form to the database>
         return mapping.findForward("<return to the same page>");
    }
    public ActionForward initPlatinumJLParam(......){
         //<load the form from the database>
         //form.setXX(...);
         return mapping.findForward("<return to the same page>");
    }
}

保存工作正常,但我填写表单时遇到了麻烦。感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

渲染JSP时,需要从bean访问变量以设置表单元素的值。

可能看起来像这样,

<input type="text" name="username" value="<%= someBean.getSomeField() >"/>

在此处阅读更多内容,http://struts.apache.org/1.x/userGuide/building_view.html

我知道这不是你的问题,但我不会建议使用相同的动作进行保存和显示。我会有一个操作来保存数据,并显示一个不同的操作。然后,当您将数据提交到保存操作时,重定向到显示操作。 This a question about redirecting.

答案 1 :(得分:0)

如果您已在struts-config.xml中声明了此类操作(假设已声明 name =“submitForm”):

<form-beans>
    <form-bean name="submitForm" type="hansen.playground.SubmitForm"/>
</form-beans>

<action   path="/submit"
              type="hansen.playground.SubmitAction"
              name="submitForm"
              input="/submit.jsp"
              scope="request">
</action>

你的表格是这样的:

package hansen.playground;
public class SubmitForm extends ActionForm {
    private String name;
    private String contactEmail;

    //Getters and setters are here....

}

然后你可以在你的Struts DispatchAction(在我的例子中,SubmitAction)执行此操作:

package hansen.playground;
public class SubmitAction extends DispatchAction{
    public ActionForward request(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
        //<insert the form to the database>
        ((SubmitForm)form).setName("The Elite Gentleman");
        ((SubmitForm)form).setContactEmail("someone@somewhere.com");

        return mapping.findForward("<return to the same page>");
    }
}

因为您的ActionForm已映射到您的Struts Action,所以当调用SubmitForm方法时,Struts会将ActionForm form发送到request。将name标记上的<action>更改为另一个ActionForm,Struts将根据请求发送该表单。

希望这会有所帮助......


编辑在输出时,您必须显示submitForm的结果,如下所示:

<html:text name="submitForm" property="name" />

(请参阅name属性匹配 Struts表单名称。)