gpt4 book ai didi

java - Struts2 双选双 header OGNL

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:51 25 4
gpt4 key购买 nike

我使用的是 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”显示在下拉列表中。第一个选择中的 header 值可以正常工作。

知道我哪里出错了吗?

提前致谢。

最佳答案

doubleselect.ftl 生成一个 JavaScript 函数,该函数根据第一个选择的 selectedId(作为参数)填充第二个选择的选项。它还在页面呈现时第一次调用此函数,只是为了选择第二个选择中的一个选项

${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>

我们可以删除外部迭代器中的代码,该代码将双 header 添加到每个选项组:

<#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??>
${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleHeaderValue?js_string}", "${doubleHeaderKey?js_string}");
<#assign doubleItemCount = doubleItemCount + 1/>
</#if>

事实上,根据您的要求,有多种方法可以实现您想要的目标。希望这对某人有帮助。

关于java - Struts2 双选双 header OGNL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com