You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Thomas Andraschko <an...@gmail.com> on 2014/03/26 20:41:59 UTC

Check if attribute is set on a UIComponent instance

Hi,

i currently try to develop a small addon to extract maxlength/required from
the BV annotations via a PostAddToViewEvent listener.

e.g.

@Max(5) @Min(1) private String test;
h:inputText value="#{bean.test}"

should automatically set maxlength to 5 and required to true.

Now, my problem is, how do i check if the attribute is really defined?
It's not enough to check "component.isRequired()" as the user could
manually set required=false in the facelets.

I already tried via:
component.getAttributes
component.getValueExpression
or even
component.getStateHelper.get

but it's always null.

AFAICS the info is only available in the StateHelper impl in a fullStateMap
or similiar.

Is there a spec conform way to check if the attribute is defined?

Thanks!

Regards,
Thomas

Re: Check if attribute is set on a UIComponent instance

Posted by Leonardo Uribe <lu...@gmail.com>.
Hi

I think there is no standard way to do that, because the component
class hides the details of how the attributes are managed internally.
If you need to know if an attribute has been set in facelets, you can
create a custom TagHandlerDelegateFactory and implement and decorate
ComponentHandlerDelegate (make it implement FacesWrapper too). Then,
add a new MetaRule to detect these two attributes and add the info in
an alternate property. That's the best I can imagine so far.

regards,

Leonardo Uribe

2014-03-26 20:41 GMT+01:00 Thomas Andraschko <an...@gmail.com>:
> Hi,
>
> i currently try to develop a small addon to extract maxlength/required from
> the BV annotations via a PostAddToViewEvent listener.
>
> e.g.
>
> @Max(5) @Min(1) private String test;
> h:inputText value="#{bean.test}"
>
> should automatically set maxlength to 5 and required to true.
>
> Now, my problem is, how do i check if the attribute is really defined?
> It's not enough to check "component.isRequired()" as the user could manually
> set required=false in the facelets.
>
> I already tried via:
> component.getAttributes
> component.getValueExpression
> or even
> component.getStateHelper.get
>
> but it's always null.
>
> AFAICS the info is only available in the StateHelper impl in a fullStateMap
> or similiar.
>
> Is there a spec conform way to check if the attribute is defined?
>
> Thanks!
>
> Regards,
> Thomas