开发者

How can I pass a server side variable into a core tag in JSP?

开发者 https://www.devze.com 2023-03-02 12:11 出处:网络
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

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}">&nbsp;<bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>

the method is

public Boolean NonAuthoritative() {
    return nonAuthoritative;
}


There are 2 problems:

  1. 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 preparing drug 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);
    %>
    

  2. (as partly answered by Nathan), EL relies on Javabeans specification. The ${drug.propertyName} requires a public method getPropertyName() for non-boolean properties or isPropertyName() for boolean properties. So, this should do

    public 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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号