struts2如何实现select标签和doubleselect标签

来源:互联网 发布:js date parse format 编辑:程序博客网 时间:2024/05/21 06:40

struts2如何实现select标签和doubleselect标签

 

1. select标签有三种实现的形式:

(1)直接写在jsp页面里的list, map, array等结构

<s:select list="{'山东','山西','河南','河北'}" label="籍贯" />

(2)通过声明bean实体的方法调用对象中list, map, array等结构

struts2.values.Province

public class Province {
 private int pid;
 private String pname;
 
 public Province(int pid, String pname) {
  this.pid = pid;
  this.pname = pname;
 }
 
 public void setPname(String pname) {
  this.pname = pname;
 }
 public String getPname() {
  return pname;
 }
 public void setPid(int pid) {
  this.pid = pid;
 }
 public int getPid() {
  return pid;
 }

 
 public String toString() {
  return new ToStringBuilder(this).append("pid", this.pid).append(
    "pname", this.pname).toString();
 }
 
}

 

struts2.values.Provinces.java

public class Provinces {
 
 private List<Province> l;
 private Map<Integer,Province> m;
 
 public Provinces() {
  l = new ArrayList<Province>();
  l.add(new Province(1,"山东省"));
  l.add(new Province(2,"山西省"));
  l.add(new Province(3,"河北省"));
  l.add(new Province(4,"河南省"));
  
  m = new HashMap<Integer,Province>();
  m.put(1, new Province(1,"山东省"));
  m.put(2, new Province(1,"山西省"));
  m.put(3, new Province(3,"河北省"));
  m.put(4, new Province(4,"河南省"));
 }
 
 public List<Province> getL() {
  return l;
 }
 public void setL(List<Province> l) {
  this.l = l;
 }
 public Map<Integer, Province> getM() {
  return m;
 }
 public void setM(Map<Integer, Province> m) {
  this.m = m;
 }
}

 

<s:bean name="struts2.values.Provinces" id="p" />

<s:select list="%{#p.l}" listValue="pname" listKey="pid" label="籍贯"></s:select>

(3). 保存在action类中的List, Map

注意一定是放在此action跳转到的页面中, 否则action不初始化也就没法产生List, Map

 <s:form action="login" method="post">
  <s:bean name="struts2.values.Provinces" id="p"></s:bean>
  <s:select list="provinces" listValue="pname" listKey="pid" label="籍贯"></s:select>

 

2.doubleselect标签

struts2.LoginAction.java

public class LoginAction extends ActionSupport {
 
 private List<Province> provinces;
 private Map<Integer, List<City>> country;
 private String name;

 @Override
 public String execute() throws Exception {
  // TODO Auto-generated method stub
  
  provinces = new ArrayList<Province>();
  provinces.add(new Province(1,"山东省"));
  provinces.add(new Province(2,"山西省"));
  provinces.add(new Province(3,"河北省"));
  provinces.add(new Province(4,"河南省"));
  
  List<City> sdProvince = new ArrayList<City>();
  sdProvince.add(new City(1,1,"济南"));
  sdProvince.add(new City(2,1,"青岛"));
  sdProvince.add(new City(3,1,"XX"));
  sdProvince.add(new City(4,1,"XX"));
  
  List<City> sxProvince = new ArrayList<City>();
  sxProvince.add(new City(5,2,"太原"));
  sxProvince.add(new City(6,2,"大同"));
  sxProvince.add(new City(7,2,"XX"));
  sxProvince.add(new City(8,2,"XX"));
  
  List<City> hbProvince = new ArrayList<City>();
  hbProvince.add(new City(9,3,"石家庄"));
  hbProvince.add(new City(10,3,"承德"));
  hbProvince.add(new City(11,3,"XX"));
  hbProvince.add(new City(12,3,"XX"));
  
  List<City> hnProvince = new ArrayList<City>();
  hnProvince.add(new City(13,4,"郑州"));
  hnProvince.add(new City(14,4,"洛阳"));
  hnProvince.add(new City(15,4,"XX"));
  hnProvince.add(new City(16,4,"XX"));
  
  country = new HashMap<Integer, List<City>>();
  country.put(1, sdProvince);
  country.put(2, sxProvince);
  country.put(3, hbProvince);
  country.put(4, hnProvince);
  return SUCCESS;
 }

 public List<Province> getProvinces() {
  return provinces;
 }

 public void setProvinces(List<Province> provinces) {
  this.provinces = provinces;
 }

 public Map<Integer, List<City>> getCountry() {
  return country;
 }

 public void setCountry(Map<Integer, List<City>> country) {
  this.country = country;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }
}

 

网页中

<s:form action="login" method="post">  

    <s:doubleselect list="provinces" listKey="pid" listValue="pname"

       doubleList="country[top.pid]" doubleListKey="pid"

       doubleListValue="cname" doubleName="cname"></s:doubleselect> 

</s:form>

 

这是最常见的一种报错, 如果你不幸遇到了这个错误且仔细查看代码均没有问题时, 请注意下面两个问题

org.apache.jasper.JasperException: tag 'select', field 'list': The requested list key 'p.l' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name}

 

1.你的List, Map等结构是放在哪里的, 如果是放在action类中的, 你的网页有没有调用到这个action, 如果没有就直接使用其中的List, Map. 就会报错, 请把你要显示select或者是doubleselect的网页设置成action的跳转页并按照跳转来查看.

2.你的标签中可能存在没有填写的赋值, 如name, listKey, listValue等

原创粉丝点击