This expression tag outpus a correct value for me <%=drug.NonAuthoritative%>
while I cant recover the value of drug.NonAuthoritative for use in开发者_如何学编程 a C tag
<c:if test="${drug.NonAuthoritative}"> <bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>
the method is
public Boolean NonAuthoritative() {
return nonAuthoritative;
}
There are 2 problems:
Scriptlets and EL do not share the same scope. The
drug
in${drug}
has to match the name of an existing attribute in the page, request, session or application scope. If you're preparingdrug
in a scriptlet instead of in a controller, then you should put it as an attribute in one of those scopes yourself.<% Drug drug = new Drug(); // ... request.setAttribute("drug", drug); %>
(as partly answered by Nathan), EL relies on Javabeans specification. The
${drug.propertyName}
requires a public methodgetPropertyName()
for non-boolean properties orisPropertyName()
for boolean properties. So, this should dopublic class Drug { private boolean nonAuthorative; public boolean isNonAuthorative() { return nonAuthorative; } // ... }
with
<c:if test="${drug.nonAuthoritative}">
(pay attention to the casing!)
The scriptlet <%=drug.NonAuthoritative%>
uses the field NonAuthoritative
of the drug
instance.
The EL expression ${drug.NonAuthoritative}
uses the method isNonAuthoritative()
of the drug
instance.
To make this work, keep the EL expression as-is, but add this method to your drug
class:
public boolean isNonAuthoritative() {
return NonAuthoritative;
}
That's because the JSTL is assuming you're using JavaBean standards, so when you call something drug.NonAuthoritative
in a JSTL expression it's looking for a method called getNonAuthoritative()
(or alternatively isNonAuthoritative()
). The scriptlet doesn't make that assumption, it just evaluates what you give it.
精彩评论