[jboss-jira] [JBoss JIRA] (AS7-4326) java.lang.StringIndexOutOfBoundsException jsf renderkit

nimo stephan (JIRA) jira-events at lists.jboss.org
Thu Mar 29 04:18:47 EDT 2012


nimo stephan created AS7-4326:
---------------------------------

             Summary: java.lang.StringIndexOutOfBoundsException jsf renderkit
                 Key: AS7-4326
                 URL: https://issues.jboss.org/browse/AS7-4326
             Project: Application Server 7
          Issue Type: Bug
          Components: JSF
    Affects Versions: 7.1.1.Final
            Reporter: nimo stephan
            Assignee: Stan Silvert


I use this code (nothing special) which renders right:

<h:form>
<h:panelGroup id="area">
<h:selectOneRadio value="#{mybean.selectedValue}" valueChangeListener="#{myBean.onMySelect}">
<f:selectItems value="#{myBean.selectables}" var="_e" itemLabel="#{_e.name}" itemValue="#{_e.name}" />
<f:ajax render="area_2"/>
</h:selectOneRadio>
</h:panelGroup>
<h:panelGroup id="area_2">
<label>Name</label>
<h:inputText required="true" value="#{myBean.name}" />
</h:panelGroup>
		
<h:commandLink value="Save" action="#{bean.save}">
<f:ajax execute="@form" render="@form" />
</h:commandLink>
</h:panelGroup>
</h:form>

When selecting a item of selectOneRadio-component then the valueChangeEvent is fired without an error. However, when submitting the form by pressing the "Save"-Button, then this (full) stacktrace happens (the stacktrace is not cut):

10:02:42,920 Information [javax.enterprise.resource.webcontainer.jsf.context] (http-localhost-127.0.0.1-8080-1) java.lang.StringIndexOutOfBoundsException: String index out of range: -1: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(String.java:1958) [rt.jar:1.7.0_01]
	at com.sun.faces.renderkit.html_basic.SelectManyCheckboxListRenderer.isBehaviorSource(SelectManyCheckboxListRenderer.java:214) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.decodeBehaviors(HtmlBasicRenderer.java:213) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.renderkit.html_basic.MenuRenderer.decode(MenuRenderer.java:221) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIInput.decode(UIInput.java:757) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1181) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIInput.processDecodes(UIInput.java:662) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIForm.processDecodes(UIForm.java:225) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIForm.visitTree(UIForm.java:362) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at org.richfaces.context.ExtendedPartialViewContextImpl.processPartial(ExtendedPartialViewContextImpl.java:199) [richfaces-core-impl-4.2.0.Final.jar:4.2.0.Final]
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) [solder-impl-3.1.0.Final.jar:3.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74) [solder-impl-3.1.0.Final.jar:3.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
	at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_01]


I don't know where the failure lies, I guess, it is a bug in the JSF-Implementation.

The strange thing is, when deleting the <f:ajax render="area_2"/> and submitting again, then no stacktrace occurs (however, I need to use ajax within the component 'selectOneRadio'. The other strange thing is this: When I use this code for my 'selectOneRadio', then ALL works fine without any stacktrace:

<h:selectOneRadio value="#{mybean.selectedValue}" valueChangeListener="#{myBean.onMySelect}" 
onchange="jsf.ajax.request(this, event, { render: 'area_2'}); return false">
<f:selectItems 	value="#{myBean.selectables}" var="_e" itemLabel="#{_e.name}" itemValue="#{_e.name}" />
</h:selectOneRadio>

So you see, I substitute this (VERSION 1):

<f:ajax render="area_2"/> 

with this (VERSION 2):

onchange="jsf.ajax.request(this, event, { render: 'area_2'}); return false"

and now it works fine.

But why can I not use (VERSION 1)?

I have thought, (VERSION 1) and (VERSION 2) should be treated equal.

The other strange thing is, that the stacktrace with (VERSION 1) only occurs with the component 'selectOneRadio'. Using the same bean-properties of 'VERSION 1' with a other component (for example, 'selectOneMenu') all works right:

<h:selectOneMenu value="#{mybean.selectedValue}" valueChangeListener="#{myBean.onMySelect}">
<f:selectItems value="#{myBean.selectables}" var="_e" itemLabel="#{_e.name}" itemValue="#{_e.name}" />
<f:ajax render="area_2"/>
</h:selectOneMenu>

So I guess, it is a bug within the ajaxified selectOneRadio.






--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list