这个表达式标签为我输出了正确的值 <%= drug.NonAuthoritative%GT;
虽然我无法恢复药物的价值.NonAuthoritative用于C标签
<c:if test="${drug.NonAuthoritative}"> <bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>
方法是
public Boolean NonAuthoritative() {
return nonAuthoritative;
}
答案 0 :(得分:5)
有两个问题:
Scriptlets 和EL不共享相同的范围。 drug
中的${drug}
必须与页面,请求,会话或应用程序范围中的现有属性的名称相匹配。如果您在 scriptlet 中而不是在控制器中准备drug
,那么您应该自己将其作为属性放在其中一个范围内。
<%
Drug drug = new Drug();
// ...
request.setAttribute("drug", drug);
%>
(由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()
) 。小脚本没有做出这个假设,它只是评估你给它的东西。