Как я могу передать переменную на стороне сервера в основной тег в JSP? - PullRequest
4 голосов
/ 02 мая 2011

Этот тег выражения выводит для меня правильное значение <% = drug.NonAuthoritative%>

, пока я не могу восстановить значение drug.NonAuthoritative для использования в теге C

<c:if test="${drug.NonAuthoritative}">&nbsp;<bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>

метод

public Boolean NonAuthoritative() {
    return nonAuthoritative;
}

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

Есть 2 проблемы:

  1. Scriptlets и EL не разделяют одну и ту же область. drug в ${drug} должно соответствовать имени существующего атрибута в области страницы, запроса, сеанса или приложения. Если вы готовите drug в скриптлете , а не в контроллере, то вы должны поместить его в качестве атрибута в одну из этих областей самостоятельно.

    <% 
        Drug drug = new Drug();
        // ...
        request.setAttribute("drug", drug);
    %>
    

  2. (частично отвечает Натан), EL опирается на спецификацию Javabeans . Для ${drug.propertyName} требуется открытый метод getPropertyName() для не булевых свойств или isPropertyName() для булевых свойств. Итак, это должно сделать

    public class Drug {
    
        private boolean nonAuthorative;
    
        public boolean isNonAuthorative() {
            return nonAuthorative;
        }
    
        // ...
    }
    

    с

    <c:if test="${drug.nonAuthoritative}">
    

    (обратите внимание на корпус!)

2 голосов
/ 02 мая 2011

скриптлет <%=drug.NonAuthoritative%> использует поле NonAuthoritative экземпляра drug.

В выражении EL ${drug.NonAuthoritative} используется метод isNonAuthoritative() экземпляра drug.

Чтобы эта работа работала, сохраните выражение EL как есть, но добавьте этот метод в класс drug:

public boolean isNonAuthoritative() {
  return NonAuthoritative;
}
1 голос
/ 02 мая 2011

Это потому, что JSTL предполагает, что вы используете стандарты JavaBean, поэтому, когда вы вызываете что-то drug.NonAuthoritative в выражении JSTL, он ищет метод с именем getNonAuthoritative() (или, альтернативно, isNonAuthoritative()).Скриплет не делает такого предположения, он просто оценивает то, что вы ему даете.

...