org.apache.jasper.JasperException:使用 JSTL c:out 作为 Struts1 的值时,“应有相等的符号” html:checkbox

org.apache.jasper.JasperException: "equal symbol expected" when using JSTL c:out as value of Struts1 html:checkbox

提问人:star lord 提问时间:5/30/2023 最后编辑:Roman Cstar lord 更新时间:5/31/2023 访问量:79

问:

我正在使用 JSTL 和 Struts1,我正在得到

org.apache.jasper.JasperException:“应有相等符号”

与:<html:checkbox>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
<c:forEach begin="0" end="${response.length() -1}" var="index">
    <tr class=""  onClick="myFunction('${response.getJSONObject(index).get("TEMPLATE_ID")}', '${response.getJSONObject(index).getString("TEMPLATE_NAME")}')">
        <td class="break-word">
            <div class="checkbox-inline">
                <div class="chkbox icheckbox_minimal hover" id="check_${response.getJSONObject(index).get("TEMPLATE_ID")}" >
                    <html:checkbox styleClass="iCheck-helper" 
                            style="position: absolute; opacity: 0;" 
                            property="orchTempList" 
                            value="<c:out value='${response.getJSONObject(index).get("TEMPLATE_ID")}'/>" />
                    <ins class="iCheck-helper" 
                            style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;" ></ins>
                </div>
                ${response.getJSONObject(index).getString("TEMPLATE_NAME")}
            </div>
        </td>
    </tr>
</c:forEach> 

这里是一个 .${response}JsonArray

jsp jstl struts-tags

评论

0赞 Arun Sudhakaran 5/30/2023
对于您使用的所有其他情况,后跟 ,但对于内部,您没有将其更改为 。我认为这可能会解决问题。'"divid="check_${response.getJSONObject(index).get("TEMPLATE_ID")}"id='check_${response.getJSONObject(index).get("TEMPLATE_ID")}'
1赞 Dave Newton 5/30/2023
@ArunSudhakaran 可能,但我会感到惊讶(除非TEMPLATE_ID中可以有引号)。原因如下:它是一个 JSP 页面,因此在浏览器获取要呈现的 HTML 之前会在服务器端进行评估。当客户看到它时,它应该是 ,这应该没问题(带引号的TEMPLATE_ID值除外)。${response.getJSONObject(index).get("TEMPLATE_ID")}id="WHATEVER_TEMPLATE_ID_IS"

答:

0赞 Dave Newton 5/30/2023 #1

您将 JSTL 标记放在 S1 复选框标记的值内;那行不通。

它必须是 S1 表达式或 JSP EL 表达式。

我会通过两种方式修复它:

  • 将数据放在更好的位置
    • 不要在 JSP 中全部处理
    • 在 Java 端做真正的工作
    • 简化视图端
  • 使用 JSP EL 访问上述数据
0赞 Roman C 5/31/2023 #2

不能在 Struts 标记的属性中使用 JSTL 标记。但是,只需将代码替换为 JSP EL 表达式即可更改代码。<c:out>

它不相关,但您应该知道,如果您在标记中嵌套双引号,它就会起作用,但 JSP 编辑器可能会显示错误,因此您可以将嵌套双引号替换为单引号。JSP 允许对属性使用单引号。为了更好地解释这个问题,您应该阅读以下问题:由于在 JSP 文件中使用双引号而导致的简单错误

更改代码:

<html:checkbox styleClass="iCheck-helper" 
                            style="position: absolute; opacity: 0;" 
                            property="orchTempList" 
                            value='${response.getJSONObject(index).get("TEMPLATE_ID")}' />