Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

jsp

jsp-tags

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;
}
like image 902
bneil Avatar asked Jan 19 '23 20:01

bneil


2 Answers

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!)

like image 169
BalusC Avatar answered May 01 '23 06:05

BalusC


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;
}
like image 25
erickson Avatar answered May 01 '23 06:05

erickson