最近在使用richfaces-ui-3.3.3.Final的rich:tabPanel的时候,没有给rich:tab设置name属性,然后就会在表单提交的时候报空指针,然后查看源码后,发现UITabPanel类使用name进行比较是否是该tab
官方使用手册文档
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_tabPanel.html
针对于tabPanel的说明:
There is also the "selectedTab" attribute. The attribute keeps an active tab name; therefore, an active tabPanel could be changed with setting a name of the necessary tab to this attribute.
粗略翻译:有一个selectedTab属性。该属性保持一个活动的tab name;因此,一个活动的tabPanel被改变,就伴随着设定一个name属性给该tab
空指针:
Caused by: java.lang.NullPointerException
at org.richfaces.component.UITabPanel.queueEvent(UITabPanel.java:266)
at javax.faces.event.FacesEvent.queue(FacesEvent.java:130)
at org.richfaces.renderkit.TabPanelRendererBase.doDecode(TabPanelRendererBase.java:106)
at org.ajax4jsf.renderkit.RendererBase.decode(RendererBase.java:75)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:790)
at javax.faces.component.UIInput.decode(UIInput.java:744)
at org.richfaces.component.UISwitchablePanel.processDecodes(UISwitchablePanel.java:167)
at org.richfaces.component.UITabPanel.processDecodes(UITabPanel.java:155)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at org.ajax4jsf.component.UIAjaxForm.processDecodes(UIAjaxForm.java:65)
at org.ajax4jsf.component.UIAjaxRegion.processDecodes(UIAjaxRegion.java:103)
at org.ajax4jsf.component.AjaxViewRoot$1.invokeContextCallback(AjaxViewRoot.java:400)
at org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:44)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:1253)
... 45 more
页面代码:
<a4j:form id="budgetform">
<rich:tabPanel id="tpBudgetCollection" switchType="client" immediate="true" selectedTab="tbBudget" >
<!-- name 设置成formID:tabId 即budgetform:tbBudget-->
<rich:tab id="tbBudget" label="aa" name="budgetform:tbBudget" immediate="true">
</rich:tab>
<!-- name 设置成formID:tabId 即budgetform:tbCollection -->
<rich:tab id="tbCollection" label="bb" name="budgetform:tbCollection" immediate="true">
</rich:tab>
<a4j:commandButton id="submitForm" value="submit" action="#{testController.save}" ></a4j:commandButton>
</a4j:form>
richfaces-ui-3.3.3.Final源码下载页面:http://www.jboss.org/richfaces/download/stable
查看源码:
private UITab processedTab(UIComponent component, Object object){
if (object != null) {
return getTabWithName(object);
}
return (UITab)component;
}
//TODO use getTabs() iterator
private UITab getTabWithName(Object tabName){
List children = getChildren();
for (Iterator iterator = children.iterator(); iterator.hasNext();) {
UIComponent childComponent = (UIComponent) iterator.next();
//因在这里tabName为"",没有一个匹配上的,所以返回null。
if(childComponent instanceof UITab && ((UITab)childComponent).getName().equals(tabName)){
return (UITab)childComponent;
}
}
return null;
}
public void queueEvent(FacesEvent event) {
if(event instanceof SwitchablePanelSwitchEvent && this.equals(event.getComponent())){
SwitchablePanelSwitchEvent switchEvent = (SwitchablePanelSwitchEvent)event;
UITab tab = processedTab(switchEvent.getEventSource(),switchEvent.getValue());
//Check if target Tab is immediate
//在这里就会报空指针异常
processedTabImmediate = tab.isImmediate();
}
if(event instanceof ActionEvent && event.getComponent()instanceof UITab){
if(isImmediate()){
event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
}
}
super.queueEvent(event);
}
相关推荐
### RichFaces 3.3 帮助文档关键知识点概览 #### 一、简介 - **RichFaces框架概述:** RichFaces是一个基于JavaServer Faces(JSF)的开源组件库,提供了大量的富客户端组件以及对皮肤的支持。该文档详细介绍了如何...
对于jboss Richfaces3.3界面重用做了比较详尽的讲述。 在对界面了解的同时,也对Richfaces组件也能有进一步的了解。 里面的英文理解起来很简单,可以提高英文阅读水平。 对于richfaces与ajax的诸多关系,也做了介绍...
### JBoss RichFaces 3.3:增强JSF Web应用程序的强大力量 #### 引言 《JBoss RichFaces 3.3》是一本专为希望利用强大的AJAX组件来增强JSF(JavaServer Faces)Web应用的开发人员而编写的书籍。作者Demetrio ...
- "richfaces3.3":这是 RichFaces 的特定版本标签,表示讨论的是3.3版本。 - "richfaces.jar":这是 RichFaces 库的 JAR 文件名,通常包含了框架的核心功能。 - "ajax4jsf":Ajax4JSF 是 RichFaces 的早期名称,它...
Richfaces3.3.3常用组件使用手册 便于学习Richfaces和a4j和jsf框架 很好很实用
《深入解析RichFaces 3.3用户指南:框架精髓与实战应用》 一、引言:RichFaces框架概览 RichFaces 3.3作为一款先进的企业级开发框架,为开发者提供了丰富的组件库以及强大的皮肤支持,极大地提升了Web应用程序的...
**标题解析:** "richfaces livedemo 3.3最新Eclipse工程" 指的是一款基于RichFaces 3.3版本的LiveDemo项目,它是一个集成在Eclipse开发环境中的示例应用。RichFaces是JavaServer Faces (JSF) 技术的一个扩展库,...
richfaces Demo 最新版3.3下载,直接放在tomcat上即可运行,访问网址:http://localhost:8080/richfaces-demo-3.3.0.GA-tomcat6
**Richfaces组件使用指南** 富Faces(Richfaces)是一个基于JavaServer Faces (JSF) 技术的开源组件库,提供了丰富的用户界面组件和Ajax功能,用于构建动态、交互式的Web应用程序。它属于JBoss项目的一部分,为开发...
《Richfaces 常用组件使用手册中文版》是一份专为中文读者准备的指南,它详细介绍了如何在Web开发中使用Richfaces组件。Richfaces是一个基于JSF(JavaServer Faces)的框架,提供了丰富的组件库以支持丰富的用户界面...
JSF2和RICHFACES4使用指南
本文档主要根据richfaces3.3.3 用户手册和demo 编写。 Richfaces 下载地址http://www.jboss.org/richfaces/download/stable。 demo 下载地址http://www.jboss.org/richfaces/demos。
RichFaces凭借其强大的功能集、灵活的组件库、高效的资源管理和皮肤技术支持,已成为构建现代化、高性能Web应用程序的理想选择。掌握RichFaces的核心概念和技术要点,对于任何致力于提升Web开发效率、优化用户体验的...
这本书可能涵盖了RichFaces的实践应用,包括如何在项目中集成RichFaces,使用特定组件进行开发,以及解决常见问题的方法。读者可能能从中学习到如何创建动态表单、使用Ajax事件、自定义组件样式,以及优化性能的技巧...
RichFaces 组件使用指南 RichFaces 是一个基于 Java 服务器 Faces(JSF)规范的开源组件库,由 JBoss 社区维护。RichFaces 提供了一系列的 AjaxEnabled 组件,可以帮助开发者快速构建富互联网应用程序。本指南将...
使用richfaces需要用到的jar包! commons-beanutils-1.7.0.jar,commons-codec-1.3.jar,commons-collections-3.2.jar,commons-digester-1.8.jar,commons-discovery-0.4.jar,commons-el-1.0.jar,commons-...
richfaces-demo-3.1.6.GA-tomcat6richfaces-demo-3.1.6.GA-tomcat6richfaces-demo-3.1.6.GA-tomcat6richfaces-demo-3.1.6.GA-tomcat6richfaces-demo-3.1.6.GA-tomcat6richfaces-demo-3.1.6.GA-tomcat6richfaces-demo...
在使用过程中,开发者可以按照文档逐步了解和掌握各个组件的用法,快速上手并解决实际问题。 总之,RichFaces是JSF开发中的有力工具,它通过丰富的组件和Ajax功能,提升了Web应用的交互性和效率。有了中文开发文档...