最近使用s:doubleselect,关联省和地市,出现了跟大家一样的问题,地市显示不出来,ie提示:XXXTemp为空或不是对象。
经反复测试查找,发现问题出现的原因如下:出现其中的一项都可能导致这个问题。
一:doubleName="userId.cityNo",这样定义是想取的是类中的一个变量,不能这样使用,不能有‘.’出现,必须是cityNo才可以。
二:doubleList="cityList",cityList必须在public class myclass extends ActionSupport类中定义,不能单独定义出来,也不能在另外的一个类中定义。
我使用的是struts2构建的。
下面是我的代码:
java类:
package tutorial;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Validateable;
import com.opensymphony.xwork2.util.OgnlValueStack;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.File;
public class UITagExample extends ActionSupport implements Validateable {
List vehicalTypeList = new ArrayList();
Map vehicalSpecificMap = new HashMap();
public UITagExample() {
VehicalType car = new VehicalType("CarKey", "Car");
VehicalType motorcycle = new VehicalType("MotorcycleKey", "Motorcycle");
VehicalType annimal = new VehicalType("annimalKey", "annimal");
vehicalTypeList.add(car);
vehicalTypeList.add(motorcycle);
vehicalTypeList.add(annimal);
List cars = new ArrayList();
cars.add(new VehicalSpecific("MercedesKey", "Mercedes"));
cars.add(new VehicalSpecific("HondaKey", "Honda"));
cars.add(new VehicalSpecific("FordKey", "Ford"));
List motorcycles = new ArrayList();
motorcycles.add(new VehicalSpecific("SuzukiKey", "Suzuki"));
motorcycles.add(new VehicalSpecific("YamahaKey", "Yamaha"));
List annimals = new ArrayList();
annimals.add(new VehicalSpecific("a1Key", "a1"));
annimals.add(new VehicalSpecific("a2Key", "a2"));
vehicalSpecificMap.put(car, cars);
vehicalSpecificMap.put(motorcycle, motorcycles);
vehicalSpecificMap.put(annimal, annimals);
}
public List getVehicalTypeList() {
return vehicalTypeList;
}
public List getVehicalSpecificList() {
OgnlValueStack stack = (OgnlValueStack) ServletActionContext.getValueStack(ServletActionContext.getRequest());
Object vehicalType = stack.findValue("top");
if (vehicalType != null ){
if( vehicalType instanceof VehicalType) {
List l = (List) vehicalSpecificMap.get(vehicalType);
return l;
} }
return Collections.EMPTY_LIST;
}
public List getVehicalTypeList() {
return vehicalTypeList;
}
public List getVehicalSpecificList() {
OgnlValueStack stack = (OgnlValueStack) ServletActionContext.getValueStack(ServletActionContext.getRequest());
Object vehicalType = stack.findValue("top");
if (vehicalType != null ){
if( vehicalType instanceof VehicalType) {
List l = (List) vehicalSpecificMap.get(vehicalType);
return l;
}
}
return Collections.EMPTY_LIST;
}
public static class VehicalType {
String key;
String description;
public VehicalType(String key, String description) {
this.key = key;
this.description = description;
}
public String getKey() { return this.key; }
public String getDescription() { return this.description; }
public boolean equals(Object obj) {
if (! (obj instanceof VehicalType)) {
return false;
}
else {
return key.equals(((VehicalType)obj).getKey());
}
}
public int hashCode() {
return key.hashCode();
}
}
public static class VehicalSpecific {
String key;
String description;
public VehicalSpecific(String key, String description) {
this.key = key;
this.description = description;
}
public String getKey() { return this.key; }
public String getDescription() { return this.description; }
public boolean equals(Object obj) {
if (! (obj instanceof VehicalSpecific)) {
return false;
}
else {
return key.equals(((VehicalSpecific)obj).getKey());
}
}
public int hashCode() {
return key.hashCode();
}
}
}
jsp代码:
文件uiTagExample.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>UI Tags Example</title>
<s:head/>
</head>
<body>
<s:actionerror/>
<s:actionmessage/>
<s:fielderror />
<s:form name="test" id="test1"action="example" method="post" enctype="multipart/form-data" tooltipConfig="#{'jsTooltipEnabled':'true'}">
<s:doubleselect
tooltip="Choose your Vehical"
label="Favourite Vehical"
name="favouriteVehicalType"
list="vehicalTypeList"
listKey="key"
listValue="description"
value="'MotorcycleKey'"
doubleValue="'YamahaKey'"
doubleList="vehicalSpecificList"
doubleListKey="key"
doubleListValue="description"
doubleName="favouriteVehicalSpecific" headerKey="-1"
headerValue="---------- Please Select ----------"
emptyOption="true" />
</s:form>
</body>
</html>
文件index.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Hello</title>
<s:head />
</head>
<body>
<h2 >s:doubleselect</h2 >
<s:form action="uiTagExample">
Name: <s:textfield name="name" />
<s:submit />
</s:form>
</body>
</html>
struts.xml文件中加入
<package name="tutorial" extends="struts-default">
<action name="uiTagExample" class="tutorial.UITagExample">
<result>uiTagexample.jsp</result>
<result name="input">uiTagexample.jsp</result>
</action>
</package>
分享到:
相关推荐
总结起来,Struts2的`s:select`和`s:doubleselect`标签为开发者提供了便捷的方式来创建和管理下拉列表,特别是`s:doubleselect`对于处理一对多关联关系的场景非常实用。通过合理利用这些标签,可以提高代码的可读性...
本文将详细介绍如何使用Struts2中的`<s:doubleselect>`标签来实现省市联动功能,并通过一个具体的业务场景来进行说明。 #### 二、业务场景分析 在代理商管理系统中,当新增代理商时需要选择其所属的省市。随后,当...
本文详细介绍了Struts 2中 `<s:checkboxlist/>` 和 `<s:doubleselect/>` 这两个表单标签的使用技巧及常见问题的解决方案。通过这些技巧,开发者能够更加高效地利用这些标签来构建用户界面。未来,我们还将继续探索更...
在本篇文章中,我们将深入探讨Struts2框架中的`doubleselect`标签的使用方法,并结合一个具体的示例来展示如何将此标签与Hibernate和Spring框架整合在一起,以便于更好地理解和运用这一技术。 ### Struts2框架简介 ...
具体来说,需要实现`findSort_`方法,该方法用于从数据库中查询数据,并将其封装成适合`doubleSelect`使用的格式。 ```java public String findSort_(){ try{ pslist = service.findSortOne(); List...
<s:doubleselect list="countries" doubleName="selectedCountry" doubleList="cities" /> ``` - **参数说明**: - `list`:指定第一个下拉框的数据源列表。 - `doubleName`:指定第一个下拉框的选择项。 - `...
<s:doubleselect doubleName="selectedOptions" doubleList="allOptions" /> ``` ##### 17. `<s:if>`、`<s:elseif>`、`<s:else>` 标签 - **用途**:用于条件判断。 - **示例**: ```xml <s:if test="%{isLogged...
新增了一些常用的控件,比如日期选择器(datepicker)、双选框(doubleselect)、时间选择器(timepicker)和选项转移选择器(optiontransferselect)等,极大地丰富了表单控件的选择。 1. **Form标签** - `<s:form>` ...
8. **`<s:doubleselect>`**:用于生成一对双列表框,支持多选。 9. **`<s:combobox>`**:生成组合框。 10. **`<s:optiontransferselect>`**:生成可移动选项的下拉列表。 11. **`<s:optgroup>`**:用于组织多个`<s:...
`<s:combobox>` 和 `<s:doubleselect>` - 创建下拉列表和双列选择框,增强用户交互。 #### 9. `<s:component>` - 组件标签 - 用于创建自定义组件,提高代码复用性。 #### 10. `<s:date>` 和 `<s:datetimepicker...
<s:doubleselect name="permissions" list="#{permissions}" listKey="key" listValue="value"/> ``` #### 三、总结 Struts2标签库的强大之处在于它提供了丰富多样的标签,可以满足Web应用开发中的各种需求。从...
<s:doubleselect name="selectedItems" list="{'item1','item2','item3'}" headerKey="" headerValue="Select Items" /> ``` - **说明**: 生成一个双列表格,允许用户从一个列表中选择项目到另一个列表。 15. **...
<s:doubleselect name="selectedItems" list="itemList" headerKey="" headerValue="--请选择--"/> ``` ##### 16. **else 标签** - **功能描述**:在条件语句中使用,当条件不满足时执行的内容。 - **示例代码**...
Struts2提供了一些新的表单标签,如`<s:checkboxlist/>`, `<s:doubleselect/>`和`<s:token/>`,它们分别用于生成复选框列表、双重选择列表和防止跨站请求伪造的令牌。 #### 结论 Struts2与Spring的集成不仅增强了...
- **Property-Driven**:使用现有的Action对象,通过属性来区分不同的请求。 ##### 12. 配置文件详解 - **指定web应用默认字符集**:通过设置struts.i18n.encoding参数来指定。 - **开发模式**:使用struts....