Подавить предупреждения в файле jsp

Как вы подавляете предупреждения (или даже ошибки) в файле фрагмента jsp в Eclipse?

У меня есть этот jspf, который я включаю в середину файла jsp, но этот jspf зависит от переменной, находящейся выше в коде, прежде чем он будет включен. Однако, несмотря на то, что все работает нормально, каждый раз, когда я проверяю свои коды (перед развертыванием), Eclipse помечает этот jspf ошибкой. Я могу спокойно проигнорировать ошибку и продолжить развертывание, но есть ли способ удалить эту ошибку с помощью аннотации предупреждения о подавлении в этом файле jspf?

main.jsp:

<% 
  String someVariable = "foo.bar"; 
%>
<% @ include file="WEB-INF/jspf/sample.jspf" %>

WEB-INF/jspf/sample.jspf

<%
  // shows unresolved local variable error when validated
  // but can still deploy just fine if error is ignored
  if(someVariable != null && someVariable.length() > 0)
    out.println(someVariable); 
%>

Приведенный выше пример очень прост, но sample.jspf никогда не будет вызываться непосредственно из URL. Он всегда будет включен в какой-либо другой файл jsp. Теперь, как удалить отметку об ошибке в Eclipse при проверке?


person kerafill    schedule 25.06.2014    source источник
comment
Если он никогда не вызывается, почему бы не прокомментировать неразрешенные части   -  person SparkOn    schedule 25.06.2014
comment
Файл sample.jspf никогда не будет вызываться напрямую из URL. Он будет помещен в безопасный каталог, где разрешено только включение. Я обновлю пример, чтобы отразить некоторые условия.   -  person kerafill    schedule 25.06.2014


Ответы (2)


Откуда sample.jspf знает, что он станет частью main.jsp?

Наконец, JSP преобразуется в файл .java Scriplet, как показано ниже, и это похоже на то, что вы используете локальную переменную, которая нигде не объявлена.

sample_jsp.java

public void _jspService(HttpServletRequest request, HttpServletResponse response)
    throws java.io.IOException, ServletException {
     JspWriter out = null;
     ...
     out.write(someVariable); // local variable that is never declared
     ...
}

Альтернативное решение

Если вы не хотите использовать JSTL, попробуйте использовать Scriplet, но никогда не советуйте вам использовать его. Сначала установите его как атрибут запроса или сеанса в первой JSP и получите к нему доступ в другой JSP.

main.jsp:

<% 
     String someVariable = "foo.bar"; 
     request.setAttribute("someVariable",someVariable);
%>

<% @ include file="WEB-INF/jspf/sample.jspf" %>

образец.jspf

<%  
    out.println(request.getAttribute("someVariable")); 
%>

Старайтесь избегать сценария, вместо этого используйте Стандартную библиотеку тегов JSP и язык выражений.

main.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="someVariable" value="foo.bar"/>

образец.jspf

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${not empty someVariable}">
    <c:out value="${someVariable}"/>
<c:if>
person Braj    schedule 25.06.2014
comment
Извините, но я думаю, что вы не правильно поняли мой вопрос. Я хочу только подавить ошибки компилятора в файле jsp, а не устранять какие-либо ошибки. - person kerafill; 25.06.2014
comment
Я понимаю вашу точку зрения об использовании библиотеки тегов JSP. Приведенный выше пример содержит только одну строку во включенном файле jspf. Что, если бы мне пришлось обработать someVariable, и для этого потребовалось бы больше строк, используя библиотеку тегов, для этого было бы много тегов? - person kerafill; 25.06.2014
comment
обновил в своем посте. not empty EL проверяет не нуль, а также пустую строку. - person Braj; 25.06.2014
comment
Итак, в основном мне нужно преобразовать все java (10 строк или более) в файле jspf в теги? - person kerafill; 25.06.2014
comment
Да, вы можете легко преобразовать его. Есть ли проблема? Если вы не можете этого сделать, поделитесь кодом или сначала узнайте больше о JSTL. - person Braj; 25.06.2014
comment
Я новичок в JSP и мало что знаю о библиотеке тегов. Мне удобнее продолжать писать код Java. Помимо преобразования в JSTL, нет ли аннотации с предупреждением о подавлении, которая работала бы для вышеуказанной ошибки? - person kerafill; 25.06.2014
comment
Вы кодируете в 21 веке. Подробнее Соглашения кода для JavaServer Pages Technology Version 1.x Language что в нем говорится: По возможности избегайте скриптлетов JSP, когда библиотеки тегов предоставляют эквивалентную функциональность. Это упрощает чтение и обслуживание страниц, помогает отделить бизнес-логику от логики представления и упрощает преобразование ваших страниц в страницы в стиле JSP 2.0 (Спецификация JSP 2.0 поддерживает, но не акцентирует внимание на использовании скриптлетов). - person Braj; 25.06.2014
comment
Знаете ли вы, как использовать теги html, если да, то это похоже на теги html. Просто прочитайте основы JSTL и сделайте лучшее приложение. - person Braj; 25.06.2014
comment
Сделать страницу легче для чтения и обслуживания — очень субъективный вопрос. Скриптлеты также обеспечивают бизнес-логику. Но я здесь не для того, чтобы спорить с этим. И да, я знаю, как использовать теги HTML. Я был бы признателен, если бы вы сохранили свою снисходительность при себе. Создание лучшего приложения также субъективно. Я просто задал вопрос о том, как подавить предупреждения/ошибки в файле jsp. Если нет прямого ответа, просто скажите, что его нет. Я рассмотрю JSTL, как вы предложили. Но если это слишком утомительно, я просто буду игнорировать ошибки/предупреждения. Приложение по-прежнему работает при развертывании в любом случае. - person kerafill; 25.06.2014
comment
Я ничего не добавил в свой комментарий от себя, я просто скопировал его прямо с официального сайта Oracle. Кстати хороший ответ. Найдите ответ в первой строке моего поста. - person Braj; 25.06.2014
comment
попробуйте <%! @SuppressWarnings("unchecked") %> и прочитайте больше ЗДЕСЬ и ЗДЕСЬ и ЗДЕСЬ. но я не думаю, что это решит это в данном случае, потому что файл JSP преобразуется в файл Scriplet .java, и если вы используете локальную переменную без ее объявления, то, что произойдет, вы это прекрасно знаете. - person Braj; 25.06.2014
comment
Я отредактировал в своем сообщении, что решит вашу проблему с помощью Scriplet. - person Braj; 25.06.2014
comment
Последние несколько дней я изучал JSTL и соглашусь с вашим предложением. У меня есть несколько вопросов о JSTL, но я опубликую их в другой теме. Я не использую встроенные сеансы в JSP, поэтому мои вопросы касаются того, автоматически ли объявленные переменные создают сеанс JSP. Я просто почитаю больше документации. - person kerafill; 02.07.2014

Вы можете использовать его в скриптлете <% @SuppressWarnings("unchecked") %>, см. этот сообщение.

person Downhillski    schedule 27.03.2017