struts中,如何使用formbean来初始化表单?

我希望update数据库中的一条记录。如何利用一个已经formbean来初始化一个update表单??

我曾经试图这样来解决问题:
1。在formbean里面给属性赋初始值,比如:
代码:
public class formbean{
private String foo = "aaa";
....
}
这样的话,是可以给表单赋初始值的,但是初始值的内容必须写死。这样只能用于给创建一条记录的表单初始化,而update必须从数据库中读取老的数据来初始化。

2。也有人提议:不用构建formbean,直接setAttribute来填充表单中的缺省值。
我觉得这种方法不是太好,从感情上来说,让formbean初始化一个form更让人觉得自然,开发也简单。其次我目前也没有找到给,option,options,select之类的form控件赋初始值的方法。

我找了很多地方,没有找到,只好在这里发这种简单的问题:(

FormBean里边应该有setter吧,就有setter做intialize啊;其实initialize的工作应该在getFormBean()的时候就做了

至于option和select之类的选定,就是在attribute里边加checked或者selected,这些都是HTML的知识了吧:)

比如说,有一个action=/admin/prepareToUpdateFoo.do用来读取老的foo的信息,以便于更新。

不知道你是否试过,当你提交给prepareToUpdateFooAction的请求的页面没有表单的时候,form参数是为空的!

问题是我form = new FooBean(),并
form.setXXX
request.setAttribute("form",form);
后,forward的页面(prepareToUpdateFoo.jsp)依然不认为我已经为已经为页面中的form建立了一个对应的bean,而是自行创建了一个新的对象。

源码中是如此:
in initFormBean();

Object bean = pageContext(beanName,....);
if(bean == null){ // create a new formBean ...}

因此我已经稍微改动了一下源码:在if(bean == null)之前加入:
if(bean == null){ bean = pageContext.getRequest().getAttribute(beanName,...)

这样struts构建form的时候就不会创建新的formbean来初始化它,而是用我set到attribute中的formbean来初始化它。


option中你说的那些选项,并不是struts的html taglib都有相应的property对应的!我的页面是用taglib写的,如果用html当然不会存在这一系列的问题。

> 比如说,有一个action=/admin/prepareToUpdateFoo.do用来?> 取老的foo的信息,以便于更新。
>
> 不知道你是否试过,当你提交给prepareToUpdateFooAction的
> 肭蟮囊趁婷挥斜淼サ氖焙颍form参数是为空的!
>
> 问题是我form = new FooBean(),并
> form.setXXX
> request.setAttribute("form",form);
> 后,forward的页面(prepareToUpdateFoo.jsp)依然不认为?> 已经为已经为页面中的form建立了一个对应的bean,而是自行
> 唇艘桓鲂碌亩韵蟆?>
> 源码中是如此:
> in initFormBean();
>
> Object bean = pageContext(beanName,....);
> if(bean == null){ // create a new formBean ...}
>
> 因此我已经稍微改动了一下源码:在if(bean ==
> null)之前加入:
> if(bean == null){ bean =
> pageContext.getRequest().getAttribute(beanName,...)
>
> 这样struts构建form的时候就不会创建新的formbean来初始化
> 怯梦set到attribute中的formbean来初始化它。
>
>
> option中你说的那些选项,并不是struts的html
> taglib都有相应的property对应的!我的页面是用taglib写的
> 绻html当然不会存在这一系列的问题。

FooBean form = new FooBean();
request.setAttribute("FooBean", form);
//跳转到页面



<action path="\PrepareUpdate" type="PrepareUpdateAction"
validate=
"false"
name=
"UpdateForm"
scope=
"request">
<forward name=
"success" path="\update.jsp"/>
</action>

<action path=
"\ProcessUpdate" type="ProcessUpdateAction"
validate=
"true"
input=
"\update.jsp"
name=
"UpdateForm"
scope=
"request"
>
<forward name=
"success" path="..."/>
</action>
在PrepareUpdateAction中初始化UpdateForm,在update.jsp显示.在ProcessUpdateAction中处理.

在Action开始用
FooBean fooBean = (FooBean)form
得到form
在用
fooBean.setXXX()
付值
转向到页面 就可以初始化了