j2ee高手看题

来源:百度知道 编辑:UC知道 时间:2024/06/06 21:07:49
我想问下,在Struts中,一个请求是否最好只对应一个Action中的方法?
今天做个小例子,功能有添加和修改。
在action中有一个insert方法。
代码如下:
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm gf = (DynaActionForm) form;
String id=request.getParameter("id");
Guestbook gb;
if(id==null)
{
gb=new Guestbook();
}else{
gb=biz.getById(Integer.parseInt(id));
}
gb.setNames(gf.getString("names"));
gb.setEmail(gf.getString("email"));
gb.setUrl(gf.getString("url"));
gb.setTitle(gf.getString("title"));
gb.setConten(gf.getString("conten"));
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
gb.setTimes(sdf.format(new Date()));
try{
biz.insert(gb);
}catch(Exception e)
{
e.printStackTrace();
}
}<

问题一:
一个请求不一定要对应一个Action。而且个人觉得推荐你使用DispatchAction,可以根据配置而对应到一个DispatchAction中的不同方法。这样一个DispatchAction就可以处理一类的问题,比较容易维护。

问题二:
你的代码只是用了insert,只能增加记录,如果要修改,要用update,所以你应该判断id,如果id在数据库中已经有了,就应该调用update方法而不是insert。虽然我没看你的biz中的insert是怎么实现的,但是我想应该是这个问题。

问题三:
对于动态Form来说,Form的类型必须是org.apache.struts.action.DynaActionForm或其子类。声明一个动态Form的代码如下:

<form-bean name="dynamicForm" type="org.apache.struts.action.DynaActionForm">
<!-- 声明一个简单属性 -->
<form-property name="simpleProp" type="java.lang.String" initial="bill"/>
<!-- 声明一个索引属性 -->
<form-property name="indexedProp" type="java.lang.String[]" />
<!-- 声明一个映射属性 -->
<form-property name="mappedProp" type="java.util.HashMap" />
<!-- 声明一个嵌套属性 -->
<form-property name="nestedProp" type="