我有一个非常奇怪的问题,跟随jsp标签的属性
<custom:tag onclick="addBid('<%= container_index + "string" %>');" />
无法由jsp编译器处理
20:18:00,374 ERROR [render_portlet_jsp:154] org.apache.jasper.JasperException: /WEB-INF/jsp/customers/abcd.jsp(146,107) equal symbol expected
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
如果" '<%= %>' "
周围有双引号,则它们不能再次位于" '<%= " " %>' "
另一方面,如果它在html元素中:
<input id="bid" onclick="addBid('<%= container_index + "string" %>');" />
工作正常
请不要告诉我,我应该使用标签库...: - )
答案 0 :(得分:4)
首先在JSP中
<%=varName%>
scriptlet意味着:用
更改行a)varName.toString()
因此,您想要输出名称未知的变量,这很奇怪。
就像在Java中你会写
String aVariableString = "test String";
System.out.println(aVariable+"String");
这没有任何意义。
但是我可以根据情况设想类似的代码:
如果只出现一次,我会按以下方式进行:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- head, or anything You want -->
<script>
function addBid(){
var bidId = document.getElementById("bidId").value;
// do whatever with bidId
}
</script>
<input type="hidden" id="bidId" value="<c:out value=${containerIndexes[knownIndex]}" />
<custom:tag onclick="addBid();" />
当然,我们通常需要循环中的数据,因此代码会发生变化:
<c:forEach var="bid" items="${bids}">
<c:out value=${bid.name} /> <custom:tag onclick="addBid(${bid.index});" />
</c:foreach>
并且带有名称出价的iterable包含至少具有
的出价类型的对象getName()
和
getIndex()
方法
如果你想在JSP中附加一个自定义字符串,那么应该使用
<custom:tag onclick="addBid('${bid.index} whatever string you want here');" />
如果我们假设索引为12,则输出如下内容:
<whateverCustomTagDoes onClick="addBid('12 whatever string you want here') />
如果您仍然希望在您的示例中使用scriptlet(在JSP中不推荐使用),并且实际上意图是将字符串附加到现有值(而不是在类似飞行的JavaScript eval上构建变量),那么答案可能是:
<custom:tag onclick="addBid('<%=container_index%>string');" />
答案 1 :(得分:0)
onclick="addBid('<%out.print(container_index + "string");%>');"
答案 2 :(得分:0)
您的自定义标记可能未启用el表达式。检查配置文件
答案 3 :(得分:0)
连接字符串并将结果存储到变量的最简单方法:
<c:set var="foo">
${var1 == true ? 'hello' : ''}
${var2 == true ? ' world' : ''}
</c:set>