rich:tabPanel不能与textarea一起使用

时间:2012-10-18 09:52:16

标签: ajax jsf-2 richfaces textarea tabpanel

我觉得我有一个富有面孔的bug。

我有一个带有tabPanel的简单页面,其中switchType ='ajax'和2(空)选项卡,第一个选项卡只包含一个textarea,其值绑定到bean属性,tabPanel不起作用。尝试更改选项卡时,请记录以下日志消息:

info [11:31:56.919]: Received 'begin' event from <div id=form:j_id2114509110_7e08d99f ...>
info [11:31:56.953]: Received 'beforedomupdate' event from <div id=form:j_id2114509110_7e08d99f ...>
info [11:31:56.957]: Element error
<error><error-name>javax.faces.component.UpdateModelException</error-name><error-message><![CDATA[org.apache.myfaces.view.facelets.el.ContextAwarePropertyNotWritableException: javax.el.PropertyNotWritableException: ResourceBundles are read-only]]></error-message></error>
error[11:31:56.959]: Received 'error@serverError' event from <div id=form:j_id2114509110_7e08d99f ...>
error[11:31:56.961]: [200] undefined: undefined
info [11:31:56.962]: Received 'complete' event from <div id=form:j_id2114509110_7e08d99f 

当我删除值绑定时,一切都按预期工作。 <德尔> 通过输入框更改textarea也可以正常工作

更新:我也遇到了switchType ='server'的服务器错误:

javax.el.PropertyNotWritableException: ResourceBundles are read-only
    org.apache.myfaces.el.unified.resolver.ResourceBundleResolver.setValue(ResourceBundleResolver.java:69)
    javax.el.CompositeELResolver.setValue(CompositeELResolver.java:68)
    org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:229)
    org.jboss.el.parser.AstPropertySuffix.setValue(AstPropertySuffix.java:73)
    org.jboss.el.parser.AstValue.setValue(AstValue.java:84)
    org.jboss.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
    org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:151)
    javax.faces.component.UIInput.updateModel(UIInput.java:402)
    javax.faces.component.UIInput.processUpdates(UIInput.java:324)
    javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1332)
    org.richfaces.component.AbstractTogglePanel.processUpdates(AbstractTogglePanel.java:302)
    javax.faces.component.UIForm.processUpdates(UIForm.java:217)
    javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1332)
    javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1332)
    javax.faces.component.UIViewRoot._processUpdatesDefault(UIViewRoot.java:1311)
    javax.faces.component.UIViewRoot.access$600(UIViewRoot.java:74)
    javax.faces.component.UIViewRoot$UpdateModelPhaseProcessor.process(UIViewRoot.java:1413)
    javax.faces.component.UIViewRoot._process(UIViewRoot.java:1272)
    javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:782)
    org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute(UpdateModelValuesExecutor.java:38)
    org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
    org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:392)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
    org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
    org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

这是工作代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich" >

  <h:head><title>Test</title></h:head>
  <h:body>
    <h:form id="form" >
      <h1>Test</h1>
      <rich:tabPanel switchType="ajax" >
        <rich:tab name="tab1" header="tab1">
          <h:inputTextarea value="#{testBean.text}" />
        </rich:tab>
        <rich:tab name="tab2" header="tab2">
          Tab2
        </rich:tab>
      </rich:tabPanel>
    </h:form>
    <a4j:log style="text-align:left;height:auto;" />
  </h:body>    
</html>

在这里我的环境: Tomcat 6.0.18,Java 1.6.0_25,Win6.1 build 7601

和依赖项:

<dependency>
  <groupId>org.apache.myfaces.tomahawk</groupId>
  <artifactId>tomahawk20</artifactId>
  <version>1.1.10</version>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>
<dependency>
   <artifactId>myfaces-impl</artifactId>
   <groupId>org.apache.myfaces.core</groupId>
   <version>2.0.9</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.1.0</version>
</dependency>
<dependency>
  <groupId>org.richfaces.core</groupId>
  <artifactId>richfaces-core-impl</artifactId>
  <version>4.2.2.Final</version>
</dependency>
<dependency>
  <groupId>org.richfaces.ui</groupId>
  <artifactId>richfaces-components-ui</artifactId>
  <version>4.2.2.Final</version>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-el</artifactId>
  <version>2.0.0.GA</version>
  <scope>runtime</scope>
  <exclusions>
    <exclusion>
      <artifactId>javax.el</artifactId>
      <groupId>el-api</groupId>
    </exclusion>
  </exclusions>
</dependency>        

有人遇到过这样的问题,有没有解决办法?

1 个答案:

答案 0 :(得分:0)

所以,我明白了!

这是一种错误,但在org.apache.myfaces.el.unified.resolver.ResourceBundleResolver版本2.0.9。

关键是我的属性名为'text',我还有一个名为'text'的资源包。此外,javax.el.CompositeELResolver org.apache.myfaces.el.unified.resolver.ResourceBundleResolver位于javax.el.BeanELResolver之前。

并且org.apache.myfaces.el.unified.resolver.ResourceBundleResolver.setValue(ELContext context, Object base, Object property, Object value)方法不检查基础对象,只查找名为属性的资源包,在我的例子中它找到了一些东西和peng!例外!

应该检查(base != null)然后离开。

相关问题