Struts 2 s:选择标签动态ID

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

由于我不知道有多少和哪种类型的字段存在, 我给它们动态id 。 我在JSP中使用Struts 2标签。

问题出在标签上:当我在id属性中给出scriplet时,它会显示以下错误:

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

  <s:select styleClass="login-textbox" style="width:130px" list="#masterColDO.validation" name="chngdColumnValues" id= />   <input type= class="login-textbox " name="chngdColumnValues" id= />  

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; 

Scriptlet是旧的做事方式, 你应该避免在JSP编写Java代码 ;
Struts2仅使用其标签和OGNL帮助您实现相同的目标。

部分正在运行,因为您正在HTML标记内注入一个scriptlet ,这是允许的。

部分无效,因为您在Struts2标记内部注入了一个scriptlet ,这是不允许的。

为了使它工作,你应该在OGNL使用#attr语法来访问在Scriptlets声明的Java变量,并在Page Context推送,就像这样(完全未经测试):

 <% for (int counter=0;counter  <% } %> 

但是,即使技术上可行,也不鼓励它。 您应该使用纯Struts2方式,如下所示:

    

PS:Struts标签没有任何styleClass属性; 你可以使用cssClass和/或cssStyle ;
并且,如果controlType是String,则应使用.equals而不是==

您应该使用Struts2表达式语法,如下所示:

 id="%{'columnId' + count}" 

Struts2使用valuestacks,所以这个计数应该以ognl方式获取,尝试这样的事情:

 id="%{'columnId'+count}"