在项目中Struts2.0页面中采用枚举常量的使用:
<s:select id="payType2" list="@com.unutrip.commonbiz.enums.OrderPaymentType@values()" listKey="code" listValue="description"></s:select>
OrderPaymentType一个枚举对象:
由于多个地方应用时:
public enum OrderPaymentType {
CREDITCARD(0, "信用卡"), ONLINE(1, "网上支付"), // ->网银支付给环游
UNSCARD(2, "商联卡POS"), // ->包含在环游商联卡里面
CASH(3, "现金"), CHECK(4, "支票"), BANKPOS(5, "银行卡POS"), TRANSLATE(6, "银行转帐"), VOICE(7, "商联卡语音");
private int code;
private String description;
public static final List<OrderPaymentType> FRONT_VALUE = Arrays.asList(OrderPaymentType.values()).subList(0, 4);
public static final List<OrderPaymentType> SETTLE_VALUE = Arrays.asList(CREDITCARD, ONLINE);
public static final List<OrderPaymentType> BACK_VALUE = Arrays.asList(CASH, CHECK, CREDITCARD, VOICE, ONLINE);
private OrderPaymentType(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static OrderPaymentType fromCode(int code) {
return EnumUtils.fromEnumProperty(OrderPaymentType.class, "code", code);
}
}
今天研究struts2的标签功能,在用select的时候,
代码如采用部分是:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><s:select id="payType2" list="@com.unutrip.commonbiz.enums.OrderPaymentType@SETTLE_VALUES" listKey="code" listValue="description"></s:select>
出现了如下异常:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->org.apache.jasper.JasperException: tag 'checkboxlist', field 'list', name 'selectRoleId': The requested list key 'roles' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:154)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.TokenInterceptor.handleValidToken(TokenInterceptor.java:178)
org.apache.struts2.interceptor.TokenInterceptor.doIntercept(TokenInterceptor.java:144)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
在网上Google一把网上说:
出现这个错误的原因可能如下:
1 刚进入该界面的时候发生错误,原因是 list="roles"中的这个集合是空的,导致错误
解决办法很简单,不能让list为空
2 刚进入该界面的时候list是有数据的,当点击提交等按钮的时候,数据被提交到后台,如果配置了验证框架或者在action中写了validate方法,校验没有通过,未走action,直接返回了input,又指定回了当前界面。
此时的checkboxlist中的list丢失了,导致了如上错误(这个错误提示的不太友好,让人认为是类转换错误)
解决办法是把初始化list的工作放到prepare拦截器中,因为prepare是在validate拦截器之前执行,即实现prepareble接口:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public class RoleAction extends ActionSupport implements Preparable{
@Override
public void prepare() throws Exception {
//初始化list
}
}
本人代碼不可能出现这样的错误,我很郁闷,继续探索中....
希望有人知道的告诉一下,谢谢!!
终于发现在struts2.16之前,struts2.0支持OGNL直接访问静态常量,之后不再支持OGNL直接访问静态常量,仅仅支持访问静态方法。问题终于解决。
分享到:
相关推荐
以上就是关于Struts2的`checkboxlist`标签换行的几种方法。通过理解Struts2的标签工作原理,结合CSS、自定义模板或前端脚本,我们可以灵活地调整复选框的布局,提高页面的可读性和用户体验。在实际项目中,应根据...
### Struts标签之CheckboxList选中值与换行处理详解 #### 一、引言 在Web应用开发中,表单元素的选择对于用户交互至关重要。Struts框架作为Java Web开发中的一个重要工具,提供了丰富的标签库来帮助开发者快速构建...
在Struts2中,处理用户输入是常见的任务,而`checkboxlist`是用于展示一组可选复选框的组件。这篇博客讨论的是如何在Struts2中处理`checkboxlist`的换行问题,这在创建多列或美观的表单布局时非常有用。 `checkbox...
通过这种方式,我们可以实现`struts`标签`checkboxlist`的默认选中值设置,并通过JavaScript动态调整布局,使界面更加友好。在实际开发中,这种方法可以帮助我们更好地控制用户界面,提升用户体验。
Freemarker是一个强大的模板引擎,常用于Web应用中的视图...同时,也涉及到了Struts2中的`checkboxlist`标签,展示了如何在视图层处理多选操作。了解这些内容后,开发者可以更有效地构建动态、数据驱动的Web应用界面。
基本标签包括 text、textarea、checkbox、radio 和 select 等。这些标签用来生成基本的 HTML 元素。 高级标签包括 datagrid、tree 和 tabbed pane 等。这些标签用来生成复杂的 HTML 元素。 Struts2 的标签库提供了...
本文将详细介绍Struts2中用于处理复选框(checkbox)、单选按钮(radio)以及下拉选择框(select)的表单标签,并通过具体的例子展示它们的用法。 ### 1. 表单标签Checkbox - 复选框 **复选框**允许用户从多个选项...
在ASP.NET中,CheckBoxList控件是通过`<asp:CheckBoxList>`标签定义的,每个选项则由`<asp:ListItem>`子标签添加。例如: ```html <asp:CheckBoxList ID="CheckBoxList1" runat="server"> ...
在实际开发中,我们可能会遇到一些关于`checkbox`标签的使用问题,比如值的绑定、多个复选框的处理等。 首先,我们来看`checkbox`标签的基本用法。在Struts2中,`<s:checkbox>`标签通常与`name`属性一起使用,这个...
在Struts2标签库中,还有许多其他的标签,如<s:checkbox />、<s:radio />、<s:textarea />等,每个标签都有其特定的使用场景和应用。 Struts2标签库提供了一系列的标签,帮助开发者快速构建Web应用程序,并提高了...
在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...
在Struts1.x中,HTML标签库提供了一系列的定制化标签,简化了视图层的开发,比如`html:radio`, `html:checkbox`, `html:multibox`和`html:select`,这些都是用来创建用户交互界面的元素,主要用于处理表单数据的输入...
Struts2是一个强大的MVC框架,它提供了丰富的标签库,使得开发者在编写JSP页面时能够更加方便地处理业务逻辑和展示数据。本篇文章主要关注Struts2中的常用标签,这些标签大大简化了Web开发中的一些常见任务。 首先...
`checkboxlist`是Struts2标签库中的一个组件,用于显示一组可选的复选框。在默认情况下,这些复选框通常是横向排列的。然而,在某些设计需求下,可能需要将这些复选框以竖向方式展示。本篇将详细解释如何在Struts2中...
### 遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList #### 知识点一:CheckBoxList概述及应用场景 **CheckBoxList** 是ASP.NET Web Forms中一个非常有用的控件,它允许用户选择一个或多个选项。CheckBoxList...
在探讨“Struts的htmlcheckbox标签的默认选中问题”这一主题时,我们首先需要对Struts框架以及htmlcheckbox标签有一个基本的了解。Struts是一个开源的MVC(Model-View-Controller)框架,用于构建企业级的Java Web...
Struts2 CheckboxList详解与应用 Struts2作为一款经典的MVC框架,为Java开发者提供了丰富的功能和组件,其中CheckboxList就是其中之一。CheckboxList在Web表单中用于展示多选选项,用户可以勾选多个选项。这篇内容...
本文将深入探讨关于CheckBoxList的绑定和遍历的实现方法及其相关知识点。 一、CheckBoxList绑定 1. 数据源绑定: CheckBoxList的数据源可以是数组、列表、数据库查询结果等,通过DataSource属性设置数据源,然后...
7. **s:checkbox标签**和**s:checkboxlist标签**:创建复选框,前者用于单个复选框,后者用于多个复选框的列表,通常与数组或集合属性关联。 8. **s:radio标签**和**s: radiogroup标签**:创建单选按钮,前者用于...