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

bne*_*eil 4 java jsp jsp-tags

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

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

<c:if test="${drug.NonAuthoritative}">&nbsp;<bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>
Run Code Online (Sandbox Code Playgroud)

方法是

public Boolean NonAuthoritative() {
    return nonAuthoritative;
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 6

有两个问题:

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

    <% 
        Drug drug = new Drug();
        // ...
        request.setAttribute("drug", drug);
    %>
    
    Run Code Online (Sandbox Code Playgroud)
  2. (部分由Nathan回答),EL依赖于Javabeans规范.对于非布尔属性或布尔属性,${drug.propertyName}需要公共方法.所以,这应该做getPropertyName()isPropertyName()

    public class Drug {
    
        private boolean nonAuthorative;
    
        public boolean isNonAuthorative() {
            return nonAuthorative;
        }
    
        // ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    <c:if test="${drug.nonAuthoritative}">
    
    Run Code Online (Sandbox Code Playgroud)

    (注意外壳!)