小编典典

Struts 2 s:选择标记动态ID

jsp

我在一个JSP页面和一个按钮中有多种类型的多个字段。这些字段是根据我创建的元数据表中的信息生成的。

由于我不知道存在多少个字段和什么类型的字段,因此 我给id它们赋予了dynamic。我在JSP中使用Struts 2标签。

问题出在<s:select>标签上:当我在id属性中提供scriplet时,它显示以下错误:

org.apache.jasper.JasperException:/success.jsp(83,12)引用符号应为

<s:if test="%{#masterColDO.controlType=='dropdown'}">
    <s:select styleClass="login-textbox" 
                   style="width:130px"  
                    list="#masterColDO.validation"     
                    name="chngdColumnValues" 
                      id=<%="columnId" + count%> />
</s:if> 
<s:else>
    <input type=<s:property value="#masterColDO.controlType" /> 
          class="login-textbox " 
           name="chngdColumnValues" 
             id=<%="columnId" + count%> />
</s:else>

Javascript如下:

var addUpdateBtnId = document.getElementById('addUpdateBtnId');
addUpdateBtnId.value='Update';
addUpdateBtnId.onclick = function() {
    onClickUpdateBtn(rowIndex);
};
var selectedUpdateRow = xmlhttp.responseText.split(",");
for(var i = 0; i < selectedUpdateRow.length; i++){
    var columnElementId = "columnId"+i;
    document.getElementById(columnElementId).value = selectedUpdateRow[i];
}
document.getElementById("columnId"+(primaryKeyPos-1)).readOnly = true;

阅读 308

收藏
2020-06-08

共1个答案

小编典典

Scriptlets为做事的老办法,你应该避免编写Java代码JSP的所有
Struts2 OGNL仅使用其标签可以帮助您实现相同的目标。

<input />零件正在工作,因为您正在向scriptletHTML标记中插入一个允许的标记。

<s:select />零件不起作用,因为scriptlet不允许在Struts2标签中注入内部。

为了使它的工作,你应该使用#attr语法OGNL访问的Java变量声明Scriptlets,并推动 通过你Page Context,像这样(没有经过充分测试):

<%
    for (int counter=0;counter<myList.size();counter++) {
       // pushing it into the pageContext
       pageContext.setAttribute("counter",counter);
%>
        <s:select cssClass="login-textbox" 
                  cssStyle="width:130px" 
                      list="#masterColDO.validation" 
                      name="chngdColumnValues"      
                        id="%{'columnId' + #attr['counter']}" />
<%    
    }
%>

但是,即使在技术上可行,也不建议这样做。您应该使用纯Struts2方式,如下所示:

<s:iterator value="myList" status="ctr">
    <s:select cssClass="login-textbox" 
              cssStyle="width:130px" 
                  list="#masterColDO.validation" 
                  name="chngdColumnValues" 
                    id="%{'columnId' + #ctr.index}" />
</s:iterator>

PS:Struts标记没有任何styleClass属性。您可以使用cssClass和/或cssStyle;
并且,如果controlType为String,则应使用.equals而不是==<s:if test="%{#masterColDO.controlType.equals('dropdown')}">

2020-06-08