论坛首页 Java版 Webwork

webwork如何处理HttpRequest里面的数组类型的参数

浏览 7473 次
该帖已经被评为精华帖
作者 正文
最后更新时间:2005-09-01
一个失败的例子,请问遇到这种页面上有相同名字的input标记的View(在HttpRequest里面对应itemlist.item.name是数组),Webwork是怎么样将其注入到Action里面的?

View
[code:1]
<form action="AddItemList.action" method="POST">
<ul>
<li>
The Item Name:<input type="text" name="itemlist.item.name" value="">
The Item Description:<input type="text" name="itemlist.item.description" value="">
</li>
<li>
The Item Name:<input type="text" name="itemlist.item.name" value="">
The Item Description:<input type="text" name="itemlist.item.description" value="">
</li>
<li>
The Item Name:<input type="text" name="itemlist.item.name" value="">
The Item Description:<input type="text" name="itemlist.item.description" value="">
</li>
<li>
The Item Name:<input type="text" name="itemlist.item.name" value="">
The Item Description:<input type="text" name="itemlist.item.description" value="">
</li>
<li>
The Item Name:<input type="text" name="itemlist.item.name" value="">
The Item Description:<input type="text" name="itemlist.item.description" value="">
</li>
</ul>
<input type="submit" value="Submit">
</form>
[/code:1]

Webwork Action
[code:1]
public class AddItemListAction extends ActionSupport{
    private List itemlist = new ArrayList();
   
    /**
     * @return Returns the itemlist.
     */
    public List getItemlist() {
        return itemlist;
    }
    /**
     * @param itemlist The itemlist to set.
     */
    public void setItemlist(List examItemList) {
        this.itemlist = examItemList;
    }
   
    public String execute() {
        return SUCCESS;
    }

}
[/code:1]

Model
[code:1]
public class Item {
    private String name;
    private String description;
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
[/code:1]


原因我大概知道,Webwork并不知道itemlist.item是什么类型,所以无法实现这一级的注入,但是我不知道该怎么写代码来实现。
   
最后更新时间:2005-09-01
搞定了,代码如下

View
[code:1]
<form action="AddItemList.action" method="POST">
<#assign range=1..5>
<ul>
<#list range as i>
<li>
The Item Name:<input type="text" name="itemlist[${i_index}].name" value="">
The Item Description:<input type="text" name="itemlist[${i_index}].description" value="">
</li>
</#list>
</ul>
<input type="submit" value="Submit">
</form>
[/code:1]


Action

[code:1]
public class AddItemListAction extends ActionSupport{
    private List itemlist;
   
    public AddItemListAction() {
        itemlist = new ArrayList();
        for (int i=0;i<5;i++){
            itemlist.add(new Item());
        }
}
    /**
     * @return Returns the itemlist.
     */
    public List getItemlist() {
        return itemlist;
    }
    /**
     * @param itemlist The itemlist to set.
     */
    public void setItemlist(List examItemList) {
        this.itemlist = examItemList;
    }
   
    public String execute() {
        return SUCCESS;
    }

}
[/code:1]


有个缺陷,就是View和Action存在一定的耦合关系,Action必须知道View上数组的长度。
   
0 请登录后投票
最后更新时间:2005-09-01
看webwork的ww:iterator 的文档
   
0 请登录后投票
最后更新时间:2005-09-01
scud 写道
看webwork的ww:iterator 的文档


我喜欢用freemarker的语法,
   
0 请登录后投票
最后更新时间:2005-09-01
那就看freemarker的文档.....

<#list itemlist as index>
   
0 请登录后投票
最后更新时间:2005-09-01
scud 写道
那就看freemarker的文档.....

<#list itemlist as index>



谢谢,已经搞定了,第二个例子就是。
   
0 请登录后投票
最后更新时间:2005-09-01
你不仅没看文档,也没看我回复的内容吗?
   
0 请登录后投票
最后更新时间:2005-09-01
scud 写道
你不仅没看文档,也没看我回复的内容吗?



晕了,Form还没有提交前,<#list itemlist as index>这个会报错吧。
   
0 请登录后投票
最后更新时间:2005-09-01
我看错了 sorry :(

我还以为是要显示结果....

不过你的程序还是可以改进...现在很不好
   
0 请登录后投票
最后更新时间:2005-09-01
sheing 写道
scud 写道
你不仅没看文档,也没看我回复的内容吗?



晕了,Form还没有提交前,<#list itemlist as index>这个会报错吧。


<#if itemlist?exists>
  ...
</#if>
   
0 请登录后投票
论坛首页 Java版 Webwork

跳转论坛:
JavaEye推荐