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

Java 如何将服务器端变量传递到JSP中的核心标记中?,java,jsp,jsp-tags,Java,Jsp,Jsp Tags,这个表达式标记为我输出了一个正确的值 虽然我无法恢复drug.NoAuthoritive在C标签中的使用价值 <c:if test="${drug.NonAuthoritative}">&nbsp;<bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if> 这是因为JSTL假设您使用的是JavaBean标准,所以当您在JSTL表达式中调用某个dru

这个表达式标记为我输出了一个正确的值

虽然我无法恢复drug.NoAuthoritive在C标签中的使用价值

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

这是因为JSTL假设您使用的是JavaBean标准,所以当您在JSTL表达式中调用某个
drug.nonauthoritive
时,它正在寻找一个名为
getnonauthoritive()
(或者
isnonauthoritive()
)的方法。scriptlet没有做出这样的假设,它只是评估您给它的内容。

有两个问题:

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

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

    
    
    (注意外壳!)

  • scriptlet
    使用
    药物
    实例的字段
    非授权

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

    要实现此功能,请保持EL表达式不变,但将此方法添加到
    药物类中:

    public boolean isNonAuthoritative() {
      return NonAuthoritative;
    }
    

    我已经定义了方法,这就是expression标签要计算的内容,对吗?@bneil:如果您可以为您定义的方法添加签名,这将有助于澄清问题。我在/oscarRx/StaticScript2.jsp263:tag='if'/attribute='test中从TagLibraryValidator for c获得此错误验证错误消息:解析带有值的自定义操作属性“test”时出错${drug.nonauthoritive()}”:遇到“(”,应为[“}”、“,“>”、“gt”中的一个,我已将该方法添加到question@bneil:我认为它不喜欢添加parens。JSTL有自己的语法,它与Java非常不同。
    public class Drug {
    
        private boolean nonAuthorative;
    
        public boolean isNonAuthorative() {
            return nonAuthorative;
        }
    
        // ...
    }
    
    <c:if test="${drug.nonAuthoritative}">
    
    public boolean isNonAuthoritative() {
      return NonAuthoritative;
    }