论坛首页 Java企业应用论坛

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

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

View
<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>


Webwork Action
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;
    }

}


Model
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;
    }
}



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

View
<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>



Action

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;
    }

}



有个缺陷,就是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的文档.....

&lt;#list itemlist as index&gt;
0 请登录后投票
   发表时间:2005-09-01  
scud 写道
那就看freemarker的文档.....

&lt;#list itemlist as index&gt;



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



晕了,Form还没有提交前,&lt;#list itemlist as index&gt;这个会报错吧。
0 请登录后投票
   发表时间:2005-09-01  
我看错了 sorry

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

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



晕了,Form还没有提交前,&lt;#list itemlist as index&gt;这个会报错吧。


&lt;#if itemlist?exists&gt;
  ...
&lt;/#if&gt;
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics