Roh*_*mar 5 javascript java jsp struts2 ognl
我在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>
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
Scriptlets为做事的老办法,你应该避免写Java在代码JSP的所有 ;
Struts2可以帮助您使用其标签实现相同的目标OGNL.
该<input />部分正在工作,因为您正在注入scriptletHTML标记内部,这是允许的.
该<s:select />部分无法正常工作,因为您正在注入一个scriptletStruts2内部标记,这是不允许的.
为了使它工作,你应该使用#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']}" />
<%
}
%>
Run Code Online (Sandbox Code Playgroud)
但是,即使技术上可行,也不鼓励它.您应该使用纯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>
Run Code Online (Sandbox Code Playgroud)
PS:Struts标签没有任何styleClass属性; 你可以使用cssClass和/或cssStyle;
并且,如果controlType是String,则应使用.equals而不是==:<s:if test="%{#masterColDO.controlType.equals('dropdown')}">.
| 归档时间: |
|
| 查看次数: |
11481 次 |
| 最近记录: |