我在JSP页面中有多个不同类型的字段和一个按钮。 这些字段是根据从我创建的元数据表中获取的信息生成的。
由于我不知道有多少字段和字段类型,我向他们提供动态id
。我在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;
答案 0 :(得分:8)
Scriptlet
是旧的做事方式,you should avoid writing Java
code in JSP
's at all;
Struts2仅使用其标记和OGNL
帮助您实现相同的目标。
<input />
部分正在运行,因为您在HTML标记内注入scriptlet
,这是允许的。
<s:select />
部分无效,因为您在Struts2标记内注入scriptlet
,这是不允许的。
要使其有效,您应该使用#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>
P.S:Struts标签没有任何styleClass
属性;您可以使用cssClass
和/或cssStyle
;
而且,如果controlType
是字符串,则应使用.equals
代替==
:<s:if test="%{#masterColDO.controlType.equals('dropdown')}">
。
答案 1 :(得分:3)
你应该使用Struts2表达式语法,如下所示:
id="%{'columnId' + count}"
答案 2 :(得分:0)
Struts2使用valuestacks,所以这个计数应该以ognl方式获取, 尝试这样的事情:
id="%{'columnId'+count}"