Как объединить строковые литералы внутри выражения JSP в пользовательском теге jsp - PullRequest
3 голосов
/ 03 марта 2011

У меня действительно странная проблема, следующий атрибут тега 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 ]

4 голосов
/ 17 марта 2011

Прежде всего в 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();" />

Конечно, обычно нам нужны эти данные в цикле, поэтому код меняется:

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

и итерация с именными ставками содержит объекты типа bid, которые по крайней мере имеют

getName() 

и

getIndex() 

методы.

Если вы хотите добавить в JSP пользовательскую строку, тогда должен работать

<custom:tag onclick="addBid('${bid.index} whatever string you want here');" />

Если мы предположим индекс 12, это выдает что-то вроде:

<whateverCustomTagDoes onClick="addBid('12 whatever string you want here') />

Если вы все еще хотите использовать скриптлет (который не рекомендуется в JSP) с вашим примером, и на самом деле вы намеревались добавить строку к существующему значению (а не создавать переменную на лету, как JavaScript eval-), тогда Ответ может быть:

<custom:tag onclick="addBid('<%=container_index%>string');" />
0 голосов
/ 04 августа 2016

Самый простой способ объединить строки и сохранить результат в переменной:

<c:set var="foo">
${var1 == true ? 'hello' : ''}
${var2 == true ? ' world' : ''}
</c:set>
0 голосов
/ 03 марта 2011

Ваш пользовательский тег может не включать el выражение Проверьте файл конфигурации

0 голосов
/ 03 марта 2011
onclick="addBid('<%out.print(container_index + "string");%>');"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...