关于 ActionForm 的设计问题

04-10-16 xuesenlin
记得以前刚刚用 JSP 的时候, 在 JSP ,Servlet 中光光是的参数是传递就折磨了够呛,还好, 自从用了Struts 以后,很少在这方面担忧了,但是新的问题又随之而来了,对应一些功能比较多,复杂的界面,你的ActiomForm怎么设计: 就比如下面这张截图

注意这里是分页显示的, 所以图中版主是在一个循环里面输出的,还要主要每一个版主后面有一个"设置生效"submit,好的,就这种情况,怎么设置ActionForm ? 刚刚开始想以整个table 为一个ActionForm ,然后用他的List,Map属性来接受,接着想到了,不对! 对于每一个独立的版主,你对他管理的资源进行权限分配了以后, 点击Sumbit提交了,就会把其他的,不属于该版主的(其他版主)信息也提交上去,别说你在Action中处理时将其他的版主置之不理,就说你如何分辨出哪些是你设置的版主的信息都很难!

况且还提交了一些无用的数据.

当然还可以以一行为一个ActionForm,但是由于是分页显示,数据是循环输出的, 如果你的<html:form ...></html:form>是在循环内的, 那么出来的这些<form />是同名的, 虽然写的时候可以通过id 的递增来给Form命名, 但是我发现,Struts中<html:form />标签生成的form始终跟struts-config.xml 中的action-mappings 元素中的 name属性或是attribute属性(优先)同名,已经写死了,可见不能生成递增的,不同的form.

就退一步来讲, 即使能在页面生成连续几个不同的form,型如:

<form name="form1" action=".." />

<form name="form2" action=".." />

<form name="form n" action=".." />

你的ActionForm 又如何设计? 总不能这样有相应的ActionForm1,ActionForm2,ActionForm3......吧...

..直到现在也不知道怎么设计上面这个ActionForm了,,,

象这样的问题一直都困扰我很久, 不知道大家有什么好的思路.

         

1
linux_china
2004-10-17 09:43
这个问题我也遇到过的,其实这是一个Master/Detail的模式,有点想采购订单或发票,有主要字段信息,有Detail信息,detail主要是多行记录。在Struts中可以采用MapForm来处理,而且比较方便,我当时使用就是JSTL+MapForm处理,可能你这个情况比我的更复杂些,不过你可以在MapForm中扩展你的功能。至于分页,我个人认为这和Form无关,主要是Action处理完毕后,通知Jsp页面有无相关的分页信息就可以啦。

这是我写的文章,或许对你有点帮助: http://www.jetmaven.net/documents/j_mapformInStruts.php

如果你有问题可以和我联系,msn: linux_china@hotmail.com,也只能帮点小忙。

xuesenlin
2004-10-18 18:04
看了Linux_china写的文章, 感觉不错, 但是这个目前还是不知道如何处理,当然,如果界面上只有一个版主,旗下面就是他的访问资源和权限,如果翻到第二页就是另一个独立的 版主,这样,每一页就是一个版主,

按照Linux_china的那种方式 可以作出来, 可以下面的ActionForm:

public class EditorActionForm extends ActionForm{
   private int editor_id;
   private int editor_name;
   private Map resource;
  //set get
  //....
}

<p>

但是,我强调的是一个页面有多个版主,这种情况是比较复杂了点,,

不知道大家有什么好的想法!

jakarta99
2004-10-21 03:06
It's ez, because u modify one row data, not multi-rows datas.

just use "ONE" actionForm for all datas.

just use a hidden input named "uid", when u onchange the forum-list options, u should set the hidden "uid" as the focus. and to set other values in hidden objects by javascript.

banq
2004-10-25 13:11
我是采取Tiles,将页面分成几个组件子页面,每个子页面对应不同的ActionForm,这个思路非常类似Tapestry。

这样做的最大好处是可以显示处理清晰,互相不影响,进而达到显示组件的重用。不知对你是否有借鉴作用?

猜你喜欢
6Go 1 2 3 4 ... 6 下一页