这是情况。
我有一个名为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>");
}
}
保存工作正常,但我填写表单时遇到了麻烦。感谢任何帮助。
答案 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表单名称。)