gpt4 book ai didi

jsp - 如何附加 c :forEach tag to Struts HTML tag attributes? 的循环索引

转载 作者:行者123 更新时间:2023-12-04 23:30:19 25 4
gpt4 key购买 nike

如何将 c: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>标签,代码工作正常。

例如
<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 标记的“property”属性的字符串吗?

更新

还尝试了以下代码段,但也不起作用
<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 中。属性(property) 的属性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>

我不认为这是一个干净的解决方案(但可能是唯一的解决方案)。因此,在我接受它作为最终答案之前,我会先让社区对此答案进行投票(或写一个更好的答案)。

关于jsp - 如何附加 c :forEach tag to Struts HTML tag attributes? 的循环索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5970295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com