如何将服务器端变量传递到JSP中的核心标记?

时间:2011-05-02 15:26:50

标签: java jsp jsp-tags

这个表达式标签为我输出了正确的值     <%= drug.NonAuthoritative%GT;

虽然我无法恢复药物的价值.NonAuthoritative用于C标签

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

方法是

public Boolean NonAuthoritative() {
    return nonAuthoritative;
}

3 个答案:

答案 0 :(得分:5)

有两个问题:

  1. Scriptlets 和EL不共享相同的范围。 drug中的${drug}必须与页面,请求,会话或应用程序范围中的现有属性的名称相匹配。如果您在 scriptlet 中而不是在控制器中准备drug,那么您应该自己将其作为属性放在其中一个范围内。

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

  2. (由Nathan部分回答),EL依赖于Javabeans specification。对于非布尔属性,${drug.propertyName}需要公共方法getPropertyName(),对于布尔属性,需要isPropertyName()。所以,这应该做

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

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

    (注意外壳!)

答案 1 :(得分:2)

scriptlet <%=drug.NonAuthoritative%>使用NonAuthoritative实例的字段 drug

EL表达式${drug.NonAuthoritative}使用isNonAuthoritative()实例的方法 drug

要使其工作,请保持EL表达式不变,但将此方法添加到drug类:

public boolean isNonAuthoritative() {
  return NonAuthoritative;
}

答案 2 :(得分:1)

那是因为JSTL假设你正在使用JavaBean标准,所以当你在JSTL表达式中调用drug.NonAuthoritative时,它正在寻找一个名为getNonAuthoritative()的方法(或者isNonAuthoritative()) 。小脚本没有做出这个假设,它只是评估你给它的东西。