Hello,
I'm sorry if this ends up in the wrong place, i'm new to this.
I encountered a problem as i tried to use extval together with facelets
extval 1.1.1
facelets 1.1.14
The Problem concerns the DefaultELHelper and a special case of EL usage
in custom facelet tags.
I am using custom composition tags in facelets like shown in this IBM
article by Richard Hightower:
http://www.ibm.com/developerworks/java/library/j-facelets/#N102EF
custom tag inside a facelet:
<my:customTag entity="#{viewBean}" fieldName="address" />
(the viewBean has an address property)
custom tag source:
<ui:composition>
<h:selectOneMenu id="#{fieldName}_input" value="#{entity[fieldName]}" >
<f:selectItem ... />
...
</h:selectOneMenu>
</ui:composition>
Problem and StackTrace:
fieldName contains the String "address", which is what we want to be evaluated
so we cant put the '' around the fieldName
ValueBindingExpression = "#{entity[fieldName]}"
result value = "entity[address]"
=> no '' around address
code line 93:
int index1 = expression.lastIndexOf("']");
expression does not contain '] but it contains ]
therefore index1 and index2 are -1 and the else branch is executed
which does not set base, so it remains null
finally this leads to an exception
Daemon Thread [http-8080-2] (Suspended (breakpoint at line 93 in
ValueBindingExpression))
ValueBindingExpression.<init>(String) line: 93
DefaultELHelper.getValueBindingExpression(UIComponent, boolean) line:
104
DefaultELHelper.getPropertyDetailsOfValueBinding(UIComponent) line: 138
DefaultComponentMetaDataExtractor.extract(FacesContext, Object) line: 85
ValidationInterceptorWithSkipValidationSupport(ValidationInterceptor).initComponent(FacesContext, UIComponent) line:
74
ValidationInterceptorWithSkipValidationSupport(ValidationInterceptor).beforeEncodeBegin(FacesContext, UIComponent, Renderer) line:
53
ExtValGenericRendererWrapper(ExtValRendererWrapper).encodeBegin(FacesContext,
UIComponent) line: 208
ExtValGenericRendererWrapper.intercept(Object, Method, Object[],
MethodProxy) line: 71
HtmlMenuRenderer$$EnhancerByCGLIB$$ba4b3ba9.encodeBegin(FacesContext,
UIComponent) line: not available
HtmlSelectOneMenu(UIComponentBase).encodeBegin(FacesContext) line: 746
ComponentSupport.encodeRecursive(FacesContext, UIComponent) line: 242
ComponentSupport.encodeRecursive(FacesContext, UIComponent) line: 249
ComponentSupport.encodeRecursive(FacesContext, UIComponent) line: 249
FaceletViewHandler.renderView(FacesContext, UIViewRoot) line: 594
AjaxViewHandler(ViewHandlerWrapper).renderView(FacesContext,
UIViewRoot) line: 101
AjaxViewHandler.renderView(FacesContext, UIViewRoot) line: 222
RenderResponseExecutor.execute(FacesContext) line: 41
LifecycleImpl.render(FacesContext) line: 146
FacesServlet.service(ServletRequest, ServletResponse) line: 147
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 290
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
AuthorizationFilter.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 97
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
ExtensionsFilter.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 246
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
EncodingFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
line: 22
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
ExtensionsFilter(ExtensionsFilter).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 301
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line:
206
StandardWrapperValve.invoke(Request, Response) line: 233
StandardContextValve.invoke(Request, Response) line: 191
StandardHostValve.invoke(Request, Response) line: 128
ErrorReportValve.invoke(Request, Response) line: 102
StandardEngineValve.invoke(Request, Response) line: 109
CoyoteAdapter.service(Request, Response) line: 286
Http11AprProcessor.process(long) line: 857
Http11AprProtocol$Http11ConnectionHandler.process(long) line: 565
AprEndpoint$Worker.run() line: 1509
Thread.run() line: 619
without extval this expression evaluates and works fine, so i guess
this is a lack of facelets/EL support.
please correct me if i am wrong, and feel free to kill me if this is
not the right place to report such a problem.
kind regards,
thomas