2011-03-03 40 views
3

内我有一个很奇怪的问题,下面的JSP标记的属性如何连接字符串文字JSP表达式里边的定制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元素T:

<input id="bid" onclick="addBid('<%= container_index + "string" %>');" /> 

它工作正常

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

回答

4

首先,在JSP中

<%=varName%> 

小脚本手段:改变与

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();" /> 

当然,通常我们需要在theese数据循环,所以代码更改:

<c:forEach var="bid" items="${bids}"> 
    <c:out value=${bid.name} /> <custom:tag onclick="addBid(${bid.index});" /> 
</c:foreach> 

和迭代与名称包含投标竞价类型的对象,其中至少有

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');" /> 
+0

尽管没有被推荐,但我最终还是使用了scriptlet。这是最简单的。谢谢! – 2015-10-15 14:14:31

0
onclick="addBid('<%out.print(container_index + "string");%>');" 
+0

它是相同的,请再看看这个问题,我发现它只会发生定制JSP标记 – lisak 2011-03-03 20:46:49

0

您的自定义标签可能没有埃尔表达式启用。检查配置文件

+0

它是内而不是表达式语言,但是JSP表达式<%= %> – lisak 2011-03-03 20:51:16

+0

我知道当我回写一些JSP标记时,我不得不添加代码(在我的情况下,从Apache库中)来解析表达式,例如您在其中编写的JSP表达式。可能有一种方法可以在自定义标记的代码之外完成此操作,但我不知道它是什么。所以也许你使用的自定义标签不支持这个。 – Marvo 2011-03-03 20:59:01

+0

我认为在标签文件上,如果rtexprvalue为false,那么<%=可能不起作用。在使用struts 1.0或之前有类似的问题。每一件事情都是模糊的,而不是100%确定 – surajz 2011-03-03 21:03:50

0

连接字符串,结果存储到变量最简单的方法:

<c:set var="foo"> 
${var1 == true ? 'hello' : ''} 
${var2 == true ? ' world' : ''} 
</c:set>