问题描述
<s:select name="attend" list="#{0:'选择',1:'出勤',2:'缺席',3:'迟到',4:'早退'}" cssClass="select2"></s:select>这样构成一个选择列表。但是,我觉得list里面的东西是可变的。如果每个页面都充斥着这样代码,日后可能很难维护。我想把list的值放到静态方法里面,然后进行访问,结构报错。public static Map<String, Object> getAttendState(){Map<String, Object> map = new HashMap<String, Object>();map.put("0", "选择");map.put("1", "出勤");return map;}在jsp里面使用<s:select name="attend" list="@com.util.StateHelp@getAttendState()" s:select>结果出错了。如果把这些变量写在静态方法里面,然后在<s:select>里调用,该怎么写?谢谢 问题补充:并且对map进行排序
解决方案
List<Map> abc = new ArrayList<HashMap>()Map map1 = new HashMap();Map map2 = new HashMap();map1.put("KEY", "0");map1.put("VALUE", "选择");map2.put("KEY", "1");map2.put("VALUE", "出勤");abc.add(map1);abc.add(map2);然后页面上面就可以只要写:<s:select list="abc" listKey="KEY" listValue="VALUE"></s:select>
解决方案二:
把map作为成员变量 get和set一下jsp中如下写:<s:select list="map" listKey="key" listValue="value" headerKey="" headerValue=""></s:select>试一试
解决方案三:
首先<s:select>中的属性list是只接受List<Map>形式的对象,而不是Map对象以下是个人的修改意见:1.你可以在你的静态方法里面,将map对象转化为JSON格式的字符串返回;2.你可以在你的Action中定义一个共用的List<Map>对象,来存放下拉框的值,例如:List<Map> abc = new ArrayList<HashMap>();然后写一个初始化的方法,往该List里面存放下拉框的值,另外,需要在Action中添加对应的get和set方法,最后,你在页面上面就可以直接写成<s:select list="abc" listKey="XXX" listValue="YYY"></s:select>listKey和listValue指的就是map里面的key。