java - Acquire method reference in JSF EL -


in jsf 2 have declared function inspect takes 1 argument of type java.lang.reflect.method , based on argument performs annotation inspection , returns true or false. catch want call function inspect jsf el able modify ui according return value not able reference of target method pass argument of function, ask how it?

example

package some.pkg;  @managedbean( name = "someclass" ) public class someclass {       @myannotation      public void somemethod( string arg1, integer arg2 ) { /* ... */ } } 

jsf function declaration

<function>     <function-name>inspect</function-name>     <function-class>some.pkg.inspector</function-class>     <function-signature>boolean inspect(java.lang.reflect.method)</function-signature> </function> 

desired invocation jsf, doesn't work

 <h:outputtext      value="somemethod annotated @myannotation"      rendered="#{inspect(someclass.somemethod)}"  /> 

acceptable this, less comfortable variant

 <h:outputtext      value="somemethod annotated @myannotation"      rendered="#{inspect(some.pkg.someclass.somemethod)}"  /> 

why don't try in server side? know before rendering page if the method annotated in current bean or not, so:

@managedbean( name = "someclass" ) public class someclass {      boolean annotated = false;      public boolean isannotated(){         return annotated;     }      @postconstruct     public void postconstruct(){         if (inspect(this.getclass().getmethod("somemethod")){             annotated=true;         }     }  } 

and in xhtml page:

<h:outputtext      value="somemethod annotated @myannotation"      rendered="#{someclass.annotated}"  /> 

you can adapt use parameter , calculate on-the-fly:

//notice in case we're using method, not getter public boolean annotated(string methodname){     return inspect(this.getclass().getmethod(methodname); } 

calling that:

<h:outputtext          value="somemethod annotated @myannotation"          rendered="#{someclass.annotated('methodname')}"      /> 

or can use @applicationscoped managed bean have access every single view:

@managedbean @applicationscoped public class inspectorbean{      public boolean inspectmethod(string classname, string methodname){         return inspect(class.forname(classname).getmethod(methodname));     }  } 

then can access all views:

<h:outputtext          value="somemethod annotated @myannotation"          rendered="#{inspectorbean.inspectmethod('completeclassname','methodname')}"      /> 

Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -