- 浏览: 197469 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
long2010:
看来是个太老的链接了。打不开……
一个纯java的H.264播放器--Onavia Video Player -
goodjin:
如果是这个语句怎么办?insert into t(id,nam ...
mysqldump导出数据到mssql -
HYbdbc:
貌似不能判断啊,我做了个测试,UTF-8编码的 还是显示gb2 ...
搜索引擎URI编码的处理 -
小鱼儿好:
Java Web实时会议解决方案 -
ssy341:
老帖子啊 连接都不能用了
JMS
用struts2的checkboxlist遇到一个问题。
下面是java对象。
package cn.jolestar.struts; /** * @author jolestar * */ public class Language { private Long id; private String name; /** * */ public Language() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Language other = (Language) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
package cn.jolestar.struts; import java.util.List; /** * @author jolestar * */ public class Album { private Long id; private String name; private List<Language> languages; /** * */ public Album() { } public List<Language> getLanguages() { return languages; } public void setLanguages(List<Language> languages) { this.languages = languages; } }
下面是jsp标签:
<s:checkboxlist name="album.languages" list="languages" listValue="name" listKey="id" > </s:checkboxlist>
action中有个getLanguages()方法,返回数据库中的所有语言。按道理我编辑Album的时候,checkboxlist中Album的已经拥有的语言会自动选中。但怎么弄,它就是不选中。没办法,看了一下struts2的相关源码,才明白了。
struts2 checkboxlist 的freemarker模板:
<#assign itemCount = 0/> <#if parameters.list?exists> <@s.iterator value="parameters.list"> <#assign itemCount = itemCount + 1/> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> <#assign itemKey = stack.findValue('top')/> </#if> <#if parameters.listValue?exists> <#assign itemValue = stack.findString(parameters.listValue)/> <#else> <#assign itemValue = stack.findString('top')/> </#if> <#assign itemKeyStr=itemKey.toString() /> <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/> <#if tag.contains(parameters.nameValue, itemKey)> checked="checked"<#rt/> </#if> <#if parameters.disabled?default(false)> disabled="disabled"<#rt/> </#if> <#if parameters.title?exists> title="${parameters.title?html}"<#rt/> </#if> <#include "/${parameters.templateDir}/simple/scripting-events.ftl" /> <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> /> <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label> </@s.iterator> <#else> </#if>
if tag.contains(parameters.nameValue, itemKey)这个if语句决定该checkbox是否选中。tag.contains()最终调用的是org.apache.struts2.util.ContainUtil中的这个方法:
public static boolean contains(Object obj1, Object obj2) { if ((obj1 == null) || (obj2 == null)) { //log.debug("obj1 or obj2 are null."); return false; } if (obj1 instanceof Map) { if (((Map) obj1).containsKey(obj2)) { //log.debug("obj1 is a map and contains obj2"); return true; } } else if (obj1 instanceof Collection) { if (((Collection) obj1).contains(obj2) || ((Collection) obj1).contains(obj2.toString())) { //log.debug("obj1 is a collection and contains obj2"); return true; } } else if (obj1.getClass().isArray()) { for (int i = 0; i < Array.getLength(obj1); i++) { Object value = null; value = Array.get(obj1, i); if (value.equals(obj2)) { //log.debug("obj1 is an array and contains obj2"); return true; } } } else if (obj1.toString().equals(obj2.toString())) { //log.debug("obj1 is an object and it's String representation equals obj2's String representation."); return true; } else if (obj1.equals(obj2)) { //log.debug("obj1 is an object and equals obj2"); return true; } //log.debug("obj1 does not contain obj2: " + obj1 + ", " + obj2); return false; }
tag.contains(parameters.nameValue, itemKey)的参数parameters.nameValue是該标签的值,在这里就是album.languages, parameters.list 是languages,itemKey是循环中的当前language的id。album.languages包含的是Language对象,而struts2却在其中查找itemKey--就是Language的id,当然就无法查找到,所以不能自动选中。
我把checkboxlist的模板改了一下。
<#assign itemCount = 0/> <#if parameters.list?exists> <@s.iterator value="parameters.list" id="it"> <#assign itemCount = itemCount + 1/> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> <#assign itemKey = stack.findValue('top')/> </#if> <#if parameters.listValue?exists> <#assign itemValue = stack.findString(parameters.listValue)/> <#else> <#assign itemValue = stack.findString('top')/> </#if> <#assign itemKeyStr=itemKey.toString() /> <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/> <#if tag.contains(parameters.nameValue,it)> checked="checked"<#rt/> </#if> <#if parameters.disabled?default(false)> disabled="disabled"<#rt/> </#if> <#if parameters.title?exists> title="${parameters.title?html}"<#rt/> </#if> <#include "/${parameters.templateDir}/simple/scripting-events.ftl" /> <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> /> <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label> </@s.iterator> <#else> </#if>
就是将tag.contains(parameters.nameValue, itemKey)改成了tag.contains(parameters.nameValue,it),it就是当前循环的Language对象,在struts2的iterator 标签里设置
<@s.iterator value="parameters.list" id="it">.(注意:如果是最新版的struts2,应该用var 而不是id).
这样就好了。需要注意的是language必须正确overwrite equals和hashCode方法。
发表评论
-
Java String intern
2009-01-14 16:31 0http://www.codingdiary.com/deve ... -
Spring自动装配(autowire)导致quartz不能运行
2008-12-18 20:24 6812在spring中配置了一个简单的quartz任务,结果报错: ... -
ActiveMQ的一个问题
2008-09-22 17:58 4176安装了activemq,然后要配置成数据库持久化的。 参考文档 ... -
四个有害的java习惯
2008-07-30 19:46 8072本文不算严格意义上的翻译,算是该文章的摘要以及读后感。 文 ... -
Dspace架设经验
2008-04-09 00:56 30241.Dspace是什么? dspace.org ... -
struts2的时间格式转换问题
2008-03-21 11:50 8872struts2提供了一个时间标签:<s:date ... -
Java Web实时会议解决方案
2008-02-28 22:48 7036Java solutions profile: Jav ... -
http://jroller.com/eyallupu/entry/hibernate_exception_simult
2007-12-01 18:54 58http://jroller.com/eyallupu/ent ... -
JavaFX尝鲜
2007-07-30 16:48 3129java6出来以后,其一大特色就是对脚本语言的支 ... -
Java SE 6.0
2007-07-05 14:35 39HTTP 增强 http://www.ibm.com/deve ... -
用ReflectionFactory实现不调用构造参数创建对象
2007-03-19 10:20 2864那天在sun的论坛上漂着,不经意发现了一篇帖子,大概 ... -
swt
2007-03-11 18:06 126widget基础 StyledText Widget ww ... -
JMS
2007-03-07 10:44 2730Geronimo 中 JMS、MDB 和 ActiveMQ 的 ... -
Hadoop
2007-03-07 10:29 41http://www.blogjava.net/calvin/ ... -
java编程奇怪错误收集
2007-03-01 21:34 29511.org.xml.sax.SAXParseException ...
相关推荐
`checkboxlist`在Struts2中通常与一个Action类中的属性关联,用于收集用户的多选数据。在HTML中,复选框默认是按行显示的,但为了优化用户界面,我们可能希望将它们分成多列显示,这就涉及到了换行。 `...
在Struts2的标签库中,`<s:checkboxlist>`标签主要用于创建多个复选框,每个复选框对应一个值。这个标签接受多个参数,如`list`(用于指定选项的集合)、`name`(用于指定表单字段名)和`label`(用于指定每个选项的...
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,与Struts2等MVC框架结合使用。在本篇文章中,我们将探讨Freemarker的基础知识,并结合Struts2中的checkboxlist进行研究。 首先,让我们理解...
为了更好地理解`<s:checkboxlist>` 标签的使用,我们首先定义一个简单的`CheckboxBean`实体类来存储每个复选框的ID和名称。 ```java public class CheckboxBean { private int id; private String name; public...
在Struts框架中,`<s:checkboxlist>`是一个非常实用的标签,用于在HTML表单中创建一组复选框,通常用于用户选择多个选项。本文将深入探讨如何巧妙地处理`checkboxlist`的默认选中值以及实现换行显示。 首先,我们...
CheckboxList是Struts2展示层的一个组件,用于处理用户多选数据。 2. **CheckboxList组件** CheckboxList组件允许用户从一组选项中选择一个或多个值。它通常与一个数组或集合绑定,每个选项对应数组或集合中的一个...
在提供的压缩包文件`struts2_usermgr`中,可能包含了一个用户管理的示例项目,其中可能有使用`checkbox`标签的例子。通过查看这个项目,我们可以更深入地了解Struts2.0的`checkbox`标签在实际应用中的用法,包括但不...
5. **标签嵌套**:`s:checkbox`可能与其他Struts2标签或者HTML元素一起使用,如`s:checkboxlist`。在这些组合中,可能出现位置、间距等显示问题。检查并修正嵌套结构,确保正确渲染。 6. **JavaScript和jQuery插件*...
`checkboxlist`是Struts2标签库中的一个组件,用于显示一组可选的复选框。在默认情况下,这些复选框通常是横向排列的。然而,在某些设计需求下,可能需要将这些复选框以竖向方式展示。本篇将详细解释如何在Struts2中...
Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建企业级Java Web应用程序。在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化...
Struts2是一个强大的Java web框架,它提供了丰富的功能来构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,Tag库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更方便地创建动态网页。本篇将...
Struts2是一个强大的Java web框架,它极大地简化了MVC(模型-视图-控制器)应用的开发。在Struts2框架中,标签库是其重要组成部分,它提供了丰富的标签来帮助开发者更方便地构建用户界面。`struts2-tags-API`就是...
Struts2是一个强大的MVC框架,它提供了丰富的标签库,使得在JSP页面中处理表单数据变得简单。本文将详细介绍Struts2中用于处理复选框(checkbox)、单选按钮(radio)以及下拉选择框(select)的表单标签,并通过...
对于那些已经熟悉Struts1的人来说,学习Struts2将是一个相对平滑的过程。Struts2标签库是其核心组件之一,它提供了丰富的前端界面构建工具,能够帮助开发者快速构建动态网页。下面将详细介绍Struts2标签库中的部分...
Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts1.x中,HTML标签库提供了一系列的定制化标签,简化了视图层的开发,比如`html:radio`, `html:checkbox`, `...
Struts2是一个强大的MVC框架,它极大地简化了Java Web应用程序的开发。在Struts2中,标签库是其核心特性之一,它提供了一系列预定义的JSP标签,用于简化视图层的编码,提高代码的可读性和可维护性。下面我们将详细...
在开发过程中,Struts2-2.3.24的帮助文档是一个宝贵的资源,它提供了详细的API参考、示例代码以及常见问题解答。通过查阅这些文档,开发者可以更好地理解如何利用Struts2的特性,解决开发过程中遇到的问题,提升开发...
Struts2是一个强大的Java EE应用程序框架,用于构建和维护可扩展、模块化和易于管理的Web应用程序。在Struts2中,标签库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更加专注于业务逻辑而不是繁琐的...