Java Struts2 doubleselect doubleheader OGNL

Java Struts2 doubleselect doubleheader OGNL,java,struts2,Java,Struts2,我使用的是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="distr

我使用的是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>
。。。。在呈现JSP时,第二次选择不会计算OGNL

doubleHeaderKey="#request.districtid" doubleHeaderValue="#request.districtname"
下拉列表中显示的是request.districtname。 第一选择中的标题值正常

知道我哪里出错了吗


提前感谢。

doubleselect.ftl生成了一个JavaScript函数,该函数根据第一个selected的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> 
我们可以删除外部迭代器中的代码,该迭代器将DoubleHeader添加到每个选项组:

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

事实上,有多种方法可以根据您的需求实现您想要的。希望这对其他人有所帮助。

第二个doubleselect的选项是在js中创建的,因此不会对doubleHeaderKey和doubleHeaderValue进行OGNL评估。这是一个重要的控制,它可以将您的生产效率提高两倍。谢谢大家!我试图显示一个以前保存的表单,从数据库中获取值,并将保存的id和second select的值设置为doubleHeaderKey和doubleHeaderValue。是否可以通过使用stack.findStringparameters.doubleHeaderKey修改doubleselect.ftl来实现?再次感谢。@WasilZafar:是的,您可以尝试修改doubleselect的模板以实现您的目标。@AleksandrM谢谢!我试试看。
<#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??>
        ${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleHeaderValue?js_string}", "${doubleHeaderKey?js_string}");
            <#assign doubleItemCount = doubleItemCount + 1/>
</#if>