我在一个JSP页面和一个按钮中有多种类型的多个字段。这些字段是根据我创建的元数据表中的信息生成的。
由于我不知道存在多少个字段和什么类型的字段,因此 我给id它们赋予了dynamic。我在JSP中使用Struts 2标签。
id
问题出在<s:select>标签上:当我在id属性中提供scriplet时,它显示以下错误:
<s:select>
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;
Scriptlets为做事的老办法,你应该避免编写Java代码JSP的所有 Struts2 OGNL仅使用其标签可以帮助您实现相同的目标。
Scriptlet
Java
JSP
OGNL
该<input />零件正在工作,因为您正在向scriptletHTML标记中插入一个允许的标记。
<input />
scriptlet
该<s:select />零件不起作用,因为scriptlet不允许在Struts2标签中注入内部。
<s:select />
为了使它的工作,你应该使用#attr语法OGNL访问的Java变量声明Scriptlets,并推动 通过你 在Page Context,像这样(没有经过充分测试):
#attr
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')}">。
styleClass
cssClass
cssStyle
controlType
.equals
==
<s:if test="%{#masterColDO.controlType.equals('dropdown')}">