`
Tin
  • 浏览: 138416 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

webwork 2.2 中如何给Collection赋值

阅读更多

原本javaeye有这么一篇帖子“在WebWork2 Action中如何自动设置Array、List、Map”,是moxie大哥写的。
http://forum.iteye.com/viewtopic.php?t=8770

但是已经是2004年11月的文章了,在webwork 2.2 b4中,XWorkList和XWorkMap已经是deprecated状态了,当时我就一头雾水,也没找到什么好的线索。
去java.net下载了XWork的最新代码,看到了其中的注释,说这个工作已经可以自动完成了。
又几经周折,才算搞明白先在如何让List、Map等工作起来,给予2.2 b4和b5工作正常:

下面简单介绍一下:
1、如果要将值映射到pojo的collection,则需要使用conversion功能。
如我又一个Action,叫testAction:

public class testAction extends ActionSupport 
        
private Collection smoeAttrs = null;//(使用webwork自动负值,应有对应getter和setter) 
        private IDeptJgzTjkEcoAttDAO ecoAttDAO = null;//(改DAO使用Spring注入,应有相应setter) 

            
public String execute() throws Exception 
                
if (log.isDebugEnabled()) 
                        log.debug(
"performing execute() method!"); 
                }
 
                
                
//持久化collection里面的pojo 
                for (Iterator iterator = smoeAttrs.iterator(); iterator.hasNext();) 
                            SomeAttr someAttr 
= (SomeAttr) iterator.next(); 
                            ecoAttDAO.saveOrUpdate(someAttr, someAttr.getId()); 
                }
 
                
                       
return Action.SUCCESS; 
            }
 
}

对应一个pojo:

package org.tin.test; 

public class SomeAttr implements Serializable 

        
/** *//** The composite primary key value. */ 
        
private java.lang.Long id; 

        
private java.lang.Float fild1; 
        
private java.lang.String fild2; 
        
private java.util.Date fild3; 

        
/**//* 
                
                对应的getter和setter 
        
*/
 
}

可以看到,上面的Action声明的时候没有任何涉及到XWorkList的地方(moxie介绍的那种风格),也就是说现在webwork并不知道Collection里面放的pojo的类型。这就是Webwork目前的高明之处,这样的代码非常干净。但是如果要自动设定Collection的值,访问到这些Pojo,则一定要知道Pojo的类型,Webwork如何做呢?
通过-conversion配置。
需要在对应该才那个testAction.java的相同目录写一个testAction-conversion.properties文件(格式就是Action名字+“-conversion.properties”)。
文件里面注明:
Element_someAttrs = org.tin.test.SomeAttr (以前版本曾经用过Collection、Map分开,但是现在不管什么类型,都用Element)
格式就是“Element_”+Action中Collection的名字+“=”+你的pojo的完整类名

如此配置后,自动设置值的时候就可以知道你的pojo的类型了,很干净。

下面一小段由于我接触Webwork不久,所以是个很初级的经验,如果需要则自取:
回忆moxie帖子中的重要的部分,在post到相应action的页面的form中,input要遵循这样的命名:
对应刚才所说的那个pojo:

<form> 
        
<input  name="someAttrs[0].fild1" value="45555.6" id="xxx11" /> 
        
<input  name="someAttrs[0].fild2" value="test" id="xxx12" /> 
        
<input  name="someAttrs[0].fild3" value="2006-01-05" id="xxx13" /> 
        
<input  name="someAttrs[1].fild1" value="45555.6" id="xxx21" /> 
        
<input  name="someAttrs[1].fild2" value="test" id="xxx22" /> 
        
<input  name="someAttrs[1].fild3" value="2006-01-05" id="xxx23" /> 
        
<input  name="someAttrs[2].fild1" value="45555.6" id="xxx31" /> 
        
<input  name="someAttrs[2].fild2" value="test" id="xxx32" /> 
        
<input  name="someAttrs[2].fild3" value="2006-01-05" id="xxx33" /> 
</form>

如何输出?很简单,在列表页中: 

<ww:iterator value="someAttrs" status="someAttrsIter"> 
<tr> 
        
<td> 
                
<ww:hidden name="someAttrs[%{#someAttrsIter.index}].id" value="%{id}"/> 
                
<ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild1" value="%{fild1}"/></td> 
        
<td><ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild2 value="%{fild2}"/></td> 
        
<td><ww:textfield name="someAttrs[%{#someAttrsIter.index}].fild3" value="%{fild3}"/></td> 
</tr> 
</ww:iterator>


即可以,因为iteratror这个tag支持iteratroStatus这个东西,用它可以获取index、isOdd等信息,很方便。

配合

<action name="saveAction" class="testAction"> 
        
<result name="success" type="redirect">/loadByInf.action?id=${someAttrOwner.id}</result> 
</action>

则很容易的实现对Collection的CRUD。正好用到了ONGL的集中基本访问方式:#、%{}、${}

以上内容,错漏难免。因为今天终于可以偷闲,赶紧结绳记之。欢迎大家讨论更简便的方法。

 

分享到:
评论

相关推荐

    WebWork 2.2新特性的PPT.rar

    在"WebWork22new.doc"和"WebWork2_2_new.ppt"这两个文件中,读者可以深入了解到WebWork 2.2的新特性、使用方法以及实际应用案例。通过详细阅读和实践,开发者可以充分利用这些新特性来提高开发效率,构建出更加健壮...

    webWork2.2+spring +SpringMVC组合 例子

    【标题】:“webWork2.2+spring+SpringMVC组合例子”是一个示例项目,展示了如何将三个经典的Java Web框架——WebWork2.2、Spring以及Spring MVC整合在一起,以构建一个完整的Web应用程序。这样的组合可以充分利用各...

    WebWork2.2入门

    在WebWork2.2中,MVC模式是核心设计思想。模型(Model)负责业务逻辑处理,视图(View)负责数据的展示,而控制器(Controller)则协调模型和视图,处理用户请求,并将数据传递给视图进行渲染。 ### 动作映射 ...

    webwork2.2例子带有lib包

    WebWork2.2是一个基于Java的轻量级MVC(模型-视图-控制器)框架,主要用于构建Web应用程序。这个框架在2000年代初期非常流行,它提供了丰富的功能和灵活性,帮助开发者构建高性能、可维护的Web应用。本压缩包包含了...

    webwork2.2

    webwork2.2.jar 类包 web work2

    webwork-2.2.2

    webwork的包。webwork开发者不可缺少的

    webwork-2.1.7 xwork.jar

    webwork 2.1.7 版 原版留存 xwork.jar

    webwork2.17中文使用手册

    webwork2.17中文使用手册

    webwork2中文教程

    在本教程中,我们将深入探讨WebWork2的核心概念、功能及其在实际开发中的应用。 WebWork2是Struts的前身,它在Struts的基础上进行了很多改进,比如更强大的动作映射、类型安全的参数绑定以及更优秀的异常处理机制。...

    webwork中文 webwork中文参考 webwork中文资料 webwork学习资料

    尽管随着时间的发展,新的框架如Spring MVC和Play Framework等逐渐崭露头角,但WebWork依然在许多现有项目中发挥着重要作用,特别是在那些重视代码质量和开发效率的企业中。对于希望深入理解MVC架构和Java Web开发的...

    webwork2中文参考

    webwork2中文参考

    webwork中文文档

    1. **配置WebWork**:首先,需要在项目的web.xml中配置WebWork的监听器,并在WebWork的配置文件中定义Action和拦截器。 2. **编写Action类**:创建Action类并实现相应的业务逻辑。 3. **配置拦截器**:根据需要选择...

    webwork2中文文档

    3. **视图与模板**:探讨JSP、FreeMarker或其他模板引擎在WebWork2中的使用,解释如何创建和管理视图组件,以及如何通过OGNL(Object-Graph Navigation Language)表达式在视图中访问模型数据。 4. **模型**:讨论...

    webwork 2.2.6中文文档

    webwork 2.2.6 中文版本,然后编译生成chm格式,方面查看。

    WebWork中文文档

    - **Configuration**:WebWork框架的配置信息存储在XML配置文件中,包括Action的映射、拦截器的定义等。 ### 学习WebWork框架的步骤 想要熟练掌握WebWork框架,以下步骤可能会有所帮助: 1. **理解MVC架构**:...

    webwork中文帮助文档

    在WebWork框架中,模型(Model)负责处理业务逻辑,视图(View)负责展示数据,控制器(Controller)则协调模型和视图,处理用户的请求。这种架构使得代码组织清晰,易于维护和扩展。 1. **安装与配置**: - ...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    在"webwork-1.4-src.zip"这个压缩包中,包含了WebWork1.4的源代码,这对于学习和理解WebWork的工作原理以及进行定制开发非常有帮助。 1. **MVC模式**:WebWork1.4遵循MVC架构,将应用程序分为模型、视图和控制器三...

    webwork中文参考手册

    在学习过程中,除了阅读手册,还建议动手实践,结合实际项目加深理解,以便更好地应用WebWork框架解决实际问题。此外,了解WebWork的进化历程和它如何与Struts2等其他框架融合也很有帮助,因为这能让你了解框架的...

Global site tag (gtag.js) - Google Analytics