Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
538 views
in Technique[技术] by (71.8m points)

jsp - How does Java expression language resolve boolean attributes? (in JSF 1.2)

So we all know that #{someBean.value} will try and get the content of some property on someBean called value. It will look for getValue(). However, what if this property is boolean? It will look for isValue(). What it won't look for is hasValue().

This got me thinking, what exactly does it do?

Java EE 5 tutorial chapter - Unified Expression Language refers to PageContext.FindAttribute(). PageContext sends you to JSPContext. None of them actually explain the rules they are following to determine the name of the method they are looking for.

It is also fairly easy to find documentation that says the method names must begin with get. However, I know that isValue() works.

Can anyone point me to documentation where this is written down. I'm not looking for tutorials or examples I'm looking for reference.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It's authoritatively documented in both the JavaBeans Spec and EL Specification.

To take the boolean property as an example, it's described in chapter 8.3.2 of JavaBeans spec:

8.3.2 Boolean properties

In addition, for boolean properties, we allow a getter method to match the pattern:

public boolean is<PropertyName>();

This “is<PropertyName>” method may be provided instead of a “get<PropertyName>” method, or it may be provided in addition to a “get<PropertyName>” method.

In either case, if the “is<PropertyName>” method is present for a boolean property then we will use the “is<PropertyName>” method to read the property value.

An example boolean property might be:

    public boolean isMarsupial();
    public void setMarsupial(boolean m);

So, #{bean.marsupial} expects exactly the above getter/setter pair.

And in chapter 1.23.5 of EL spec:

1.23.5 Coerce A to Boolean or boolean

  • If A is null and the target type is not the primitive type boolean, return null
  • If A is null or "", return false
  • Otherwise, if A is a Boolean, return A
  • Otherwise, if A is a String, and Boolean.valueOf(A) does not throw an exception, return it
  • Otherwise, error

See also:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...