[英]Struts2 doubleselect doubleheader OGNL
我正在使用Struts 2.3.15.1,同時在JSP中使用doubleselect
標記,如下所示
<s:form action="testSubmit">
<label>State and District</label>
<s:doubleselect list="#request.statDistMap.keySet()" name="statename" headerValue="#request.state" doubleName="districtid"
doubleList="#request.statDistMap[top]" doubleListKey="districtid" doubleListValue="districtname"
doubleHeaderKey="#request.districtid" doubleHeaderValue="#request.districtname"/>
<s:submit cssClass="submitButton" title="Submit" value="Submit"></s:submit>
</s:form>
...具有Action類:
public class HelloWorld extends ActionSupport implements RequestAware {
private Map requestMap;
public void setRequest(Map requestMap) {
this.requestMap = requestMap;
}
public String execute() throws Exception {
Map statDistMap = new HashMap();
List l1 = new ArrayList();
List l2 = new ArrayList();
DistrictDTO d1 = new DistrictDTO();
d1.setDistrictid(1);
d1.setDistrictname("Indiana");
DistrictDTO d2 = new DistrictDTO();
d2.setDistrictid(2);
d2.setDistrictname("Ohio");
DistrictDTO d3 = new DistrictDTO();
d3.setDistrictid(3);
d3.setDistrictname("Alabama");
DistrictDTO d4 = new DistrictDTO();
d4.setDistrictid(4);
d4.setDistrictname("Mississippi");
l1.add(d1);
l1.add(d2);
l2.add(d3);
l2.add(d4);
statDistMap.put("East North Central", l1);
statDistMap.put("East South Central", l2);
requestMap.put("statDistMap", statDistMap);
requestMap.put("state", "Mid-Atlantic");
requestMap.put("districtid", 5);
requestMap.put("districtname", "New York");
return SUCCESS;
}
}
....呈現JSP,第二個選擇不評估OGNL
doubleHeaderKey="#request.districtid" doubleHeaderValue="#request.districtname"
而是在下拉列表中顯示"#request.districtname"
。 第一次選擇中的標頭值正常。
知道我哪里出錯了嗎?
提前致謝。
doubleselect.ftl生成一個JavaScript函數,該函數基於第一個select的selectedId(作為參數)填充第二個select的選項。 當頁面呈現時,它也會第一次調用此函數,只是選擇第二個選擇中的一個選項
${parameters.id}Redirect(${redirectTo});
我們可以編寫並調用我們自己的函數來填充第二個選擇選項,並且僅是第一次選擇所選擇的選項,例如
function initialize() {
var selected = false;
${parameters.id}Temp.options[0] = new Option("${dhv?js_string}", "${dhk?js_string}");
if ((${parameters.id}Temp.options.length > 0) && (! selected)) {
${parameters.id}Temp.options[0].selected = true;
}
}
同樣,dhv和dhk是doubleHeaderValue和doubleHeaderKey,它們可以采用OGNL表達式的形式,在ftl中指定和評估如下:
<#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??>
<#global dhv = stack.findString(parameters.doubleHeaderValue)/>
<#global dhk = stack.findString(parameters.doubleHeaderKey)/>
</#if>
我們可以刪除外部迭代器中的代碼,該代碼將雙頭添加到每個選項組:
<#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??>
${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleHeaderValue?js_string}", "${doubleHeaderKey?js_string}");
<#assign doubleItemCount = doubleItemCount + 1/>
</#if>
實際上,有多種方法可以根據您的需求實現所需的目標。 希望這對某人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.