如何在自定义jsp标记内的JSP表达式内部连接字符串文字

时间:2011-03-03 20:40:14

标签: java jsp expression

我有一个非常奇怪的问题,跟随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" %>');" />

工作正常

请不要告诉我,我应该使用标签库...: - )

4 个答案:

答案 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>