如何将ac:forEach标记的循环索引附加到struts select / text标记的属性?
例如。
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html"%> <c:forEach begin="2" end="${pageView.guestCount}" varStatus="gC"> <div class="section guest-details"> <html:select property='title_guest<c:out value="${gC.index}"/>'> <html:options collection="titles" property="code" labelProperty="value" /> </html:select> </div> </c:forEach>
引发以下错误
javax.servlet.jsp.JspException at org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:246)
现在,当我调试<html:select ...它的代码时,表明设置了属性属性时,将其设置为"title_guest<c:out value="${gC.index}"/>"可能是导致上述异常的原因。
<html:select ...
"title_guest<c:out value="${gC.index}"/>"
另外,我应该提到的是,如果我使用上述格式将循环索引附加到标准html标记属性(例如<select>标记),则代码可以正常工作。
<select>
例如
<c:forEach begin="2" end="${pageView.guestCount}" varStatus="gC"> <div class="section guest-details"> <select name='title_guest<c:out value="${gC.index }"/>'> <option value="">Select Title</option> </select> </div> </c:forEach>
正确输出预期的HTML
我在做什么错,我应该使用EL创建将填充html:select标记的“属性”属性的字符串吗?
更新
以下代码段也经过了尝试,但也无法正常工作 <html:select property="title_guest${gC.index}">
<html:select property="title_guest${gC.index}">
而且,这也不起作用
<c:set var="guestTitle">title_guest${gC.index}</c:set> <html:select property="${guestTitle}" styleClass="{required: true}"> <html:options collection="titles" property="code" labelProperty="value" /> </html:select>
经过一番痛苦的挖掘之后,我似乎找到了问题所在,因此找到了解决方案。该 C:的forEach 标签不所述varStatus导出为脚本变量,并因此不能被使用的varStatus变量在 RT Expr的 用于 属性 的属性 HTML:选择 标记。
但是, c:forEach 确实将varStatus变量导出为pageContext属性,可以将其检索并用于提取索引/计数。唯一的问题是,您将必须导入javax.servlet.jsp.jstl.core.LoopTagStatus类,并使用该类手动重新创建varStatus变量,以便可以在脚本中使用它
这是有效的代码片段
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="javax.servlet.jsp.jstl.core.LoopTagStatus" %> ... <c:forEach begin="2" end="${pageView.guestCount}" varStatus="gC"> <% LoopTagStatus gN = (LoopTagStatus)pageContext.getAttribute("gC"); %> <html:select property='<%="title_guest"+gN.getIndex()%>'> <html:options collection="titles" property="code" labelProperty="value" /> </html:select> </c:forEach>
我认为这不是一个干净的解决方案(但可能是唯一的解决方案)。因此,在我接受该答案作为最终答案之前,我将让社区首先对此答案进行投票(或写出更好的答案)。