我正在尝试使用地图为表单中的每个对象创建一个表单。
当我迭代思考地图时,它会识别它是否是文本字段或其他内容。我的问题始于<s:select/>
。
我必须填充地图中的所有数据,但是当我使用jsp表达式<%= %>
来放置正确的密钥时,我无法获取列表。
MyAction.java
public class MyAction extends ActionSupport {
private static final long serialVersionUID = 1219003996856257128L;
private Map<String, Object> map = new HashMap<String, Object>();
public Map<String, Object> getMap() {
return map;
}
public String populate() {
// get all attributes ...
// for each put data in map...
// in .jsp create txtfields / txtareas / checkboxes, depends on attribute type...
// <s:select /> not working
// example with single attribute
Attribute<?> attr = Attribute.getTestList();
//map.put("testList", "prd");
// 'testList' x 'prd'
map.put(attr.getName(), attr.getValue());
// when attribute is list, i will put into map it's List<String> (ArrayList<String>)
// with all possible values
// key is same as selected value's key with suffix '_data'
if(attr.isList()) {
//List<String> list = new ArrayList<String>();
//list.add("---");
//list.add("prd");
//list.add("kak");
//map.put("testList_data", list);
// 'testList_data' x 'List<String> => {"---", "prd", "kak"}'
map.put(attr.getName() + "_data", ((ListAttribute) attr).getPossibleValuesAsList());
}
return "fill";
}
public String execute() {
return "result";
}
}
page.jsp
<s:form id='form' action='submit' enctype='multipart/form-data' method='POST'>
<!-- test list attribute, contains name, value and list of possible values -->
<%
Attribute<?> attr = Attribute.getTestList();
%>
<!-- store input's name -->
<s:set var='inputName'>map['<%= attr.getName() %>']</s:set>
<%
if(attr.isList()) {
%>
<!-- store input's list -->
<s:set var='listData'>map['<%= attr.getName() + "_data" %>']</s:set>
<!-- not working -->
<s:select list='%{listData}' name="%{inputName}" />
<!-- key filled manually - working, but useless for me -->
<s:select list="map['testList_data']" name="%{inputName}" />
<%
}
%>
<sj:submit id='sumbitButton' value='AbrakaDabra' targets="myAjaxTarget"/>
</s:form>
<div id="myAjaxTarget"></div>
问题是当我尝试在<s:select/>
标记中设置list属性时。我尝试了类似的方式,如名称(或ids或其他),但它没有用。
有谁知道为什么名称已填写且工作正常但列表不是?
s:select list='%{listData}' name="%{inputName}"
正如您在以下图像中看到的那样,首先选择只有一个(已损坏)选项。在第二张图片中,您可以看到我想要的理想结果,但我需要使用jsp表达式。
整体形式:
理想的结果:
答案 0 :(得分:0)
避免使用Scriptlet,并尝试使用OGNL。
获得所需结果所需的代码应类似于以下内容:
<s:select list="map['%{#attr.attr.name}_data']" name="%{#attr.attr.name}" />