问题
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;
}
回答1:
There are 2 problems:
Scriptlets and EL do not share the same scope. The
drugin${drug}has to match the name of an existing attribute in the page, request, session or application scope. If you're preparingdrugin 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!)
回答2:
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;
}
回答3:
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.
来源:https://stackoverflow.com/questions/5859023/how-can-i-pass-a-server-side-variable-into-a-core-tag-in-jsp