`
xiaojianbo
  • 浏览: 34470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重写FacesStateManager,为解决验证显示问题

阅读更多

Richfaces验证后,验证不通过会有错误显示,当页面触发其他ajax请求时,如果想把验证错误信息清理掉,可以重写FacesStateManager来解决,关键代码:

package org.iata.isss.web.common.jsf.factory;

import java.io.IOException;
import java.util.Iterator;

import javax.faces.application.StateManager;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

/**
 * 
 * @author Xiao Jianbo
 *
 */
public class FacesStateManager extends StateManager {

	private final StateManager stateManager;

	public FacesStateManager(StateManager sm) {
		this.stateManager = sm;
	}

	@Override
	protected Object getComponentStateToSave(FacesContext ctx) {
		throw new UnsupportedOperationException();
	}

	@Override
	protected Object getTreeStructureToSave(FacesContext ctx) {
		throw new UnsupportedOperationException();
	}

	@Override
	protected void restoreComponentState(FacesContext ctx, UIViewRoot viewRoot,
			String str) {
		throw new UnsupportedOperationException();
	}

	@Override
	protected UIViewRoot restoreTreeStructure(FacesContext ctx, String str1,
			String str2) {
		throw new UnsupportedOperationException();
	}

	@Override
	public SerializedView saveSerializedView(FacesContext facesContext) {
		
		processEditableValueHolder(facesContext.getViewRoot());
		
		return stateManager.saveSerializedView(facesContext);
	}

	private void processEditableValueHolder(UIComponent component) {

		if (component instanceof EditableValueHolder) {
			EditableValueHolder editableValueHolder = (EditableValueHolder) component;
			editableValueHolder.setValid(true);
			boolean localset = editableValueHolder.isLocalValueSet();
			editableValueHolder.setValue(null);// super.setValue(value);setLocalValueSet(true);
			editableValueHolder.setLocalValueSet(localset);
		} else {
			Iterator<UIComponent> kids = component.getFacetsAndChildren();
			while (kids.hasNext()) {
				UIComponent kid = kids.next();
				processEditableValueHolder(kid);
			}
		}

	}

	@Override
	public void writeState(FacesContext ctx, SerializedView sv)
			throws IOException {
		stateManager.writeState(ctx, sv);
	}

	@Override
	public UIViewRoot restoreView(FacesContext ctx, String str1, String str2) {
		return stateManager.restoreView(ctx, str1, str2);
	}

	@Override
	public Object saveView(FacesContext facesContext) {
		return stateManager.saveView(facesContext);
	}

	@Override
	public void writeState(FacesContext ctx, Object sv) throws IOException {
		stateManager.writeState(ctx, sv);
	}

	@Override
	public boolean isSavingStateInClient(FacesContext ctx) {
		return stateManager.isSavingStateInClient(ctx);
	}

}

 

分享到:
评论

相关推荐

    基于IIS层的IIRF实现URL重写 + 完美解决POSTBACK问题

    【基于IIS层的IIRF实现URL重写 + 完美解决POSTBACK问题】 1.请在 Windows2003 操作系统环境下测试。 2.请确认您的IIS版本为 IIS6.0+ 。 3.请确认您已经将此项目的ASP.NET网站版本手动设置为 .NET 2.0. 4.请将Bin...

    js重写Number,解决精度问题

    js重写Number,解决精度问题

    实现重写问题的AO*搜索

    人工智能实验,重写AO*算法解决数字重排问题

    IIRF_URLRewrite基于IIS层的IIRF实现URL重写+完美解决POSTBACK问题

    5. **源码**:提供的源码可能包含IIRF的配置示例、ASP.NET应用的示例代码,以及可能的数据库脚本,帮助开发者理解和实现URL重写以及POSTBACK问题的解决。 通过这个压缩包,开发者可以深入学习如何在IIS环境中配置和...

    winform重写Richtextbox

    为了解决这个问题,开发者通常需要重写`RichTextBox`控件的功能,以扩展其字体支持。这涉及到深入理解`RichTextBox`的工作原理,包括文本渲染和字体映射。下面我们将详细介绍这个过程。 1. **字体映射**:默认情况...

    c#重写的tabcontrol控件

    可以重写TabControl以适应不同屏幕尺寸和设备类型,确保在各种环境下都能良好地显示。 7. **国际化和本地化**:如果你的应用需要支持多种语言,可以重写TabControl以方便地处理标签文本的翻译和布局调整。 在提供...

    asp.net c# Url重写和无扩展名Url重写

    通过URL重写,你可以将复杂的、参数化的URL转换为简洁的、有意义的URL,比如将`/Product.aspx?id=123`重写为`/Product/123/Coffee-Maker`。 C#是ASP.NET的主要编程语言,用于编写服务器端代码。在URL重写中,C#代码...

    Url重写示例(无后缀Url重写)

    例如,如果你有一个名为`Product.aspx`的页面,想要将其重写为`/product/{productId}`的格式,可以添加以下规则: ```xml ^product/(\d+)$" /&gt; ``` 在这个例子中,`^product/(\d+)$`是正则...

    url重写工具,重写二级域名

    标题中的“url重写工具”指的是用于转换或重新映射网站URL的一种技术,它能够将不友好的、复杂的URL转化为用户友好的、简洁的形式。在.NET环境中,这通常通过使用IIS(Internet Information Services)的扩展性来...

    重写asp.net TEXTBOX

    当输入数据不符合预设的验证规则时,`ValidError`属性可以用来设定显示给用户的错误信息。这不仅增强了错误反馈的可读性,也使得开发者能够根据具体的应用场景定制错误提示,提高了系统的可用性。 #### 实现细节与...

    DropDownList重写

    这就是“DropDownList重写”要解决的问题。 重写`DropDownList`控件通常涉及以下几个方面: 1. **继承与扩展**:首先,我们需要创建一个新的控件类,继承自ASP.NET的`System.Web.UI.WebControls.DropDownList`基类...

    C#重写MessageBox对话框

    C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框

    微信小程序 重写App、重写Page 自定义分享

    在微信小程序开发中,"重写App、重写Page与自定义分享"是常见的需求,它们涉及到小程序的基础架构和用户体验优化。以下将详细介绍这些概念及其应用。 **重写App** `App`是微信小程序的全局应用程序对象,它包含了...

    行业分类-设备装置-基于重写逻辑的并发实时程序验证的优化处理系统及其方法.zip

    "基于重写逻辑的并发实时程序验证的优化处理系统及其方法"这一主题,正是针对这个问题提供的一种解决方案。 重写逻辑是一种形式化的方法,用于描述和分析计算过程。它基于规则的推导系统,其中每个规则代表一个可能...

    C# url重写 C# url重写

    URL重写则是将实际的、可能复杂难懂的URL转换为更加简洁和易于理解的形式。这不仅有利于提升用户体验,也有助于SEO(搜索引擎优化),因为搜索引擎更倾向于抓取那些具有语义化URL的网站。 C# URL重写通常在ASP.NET...

    重写window.alert方法

    5. **测试**:在自动化测试中,可能需要避免`alert`的弹出干扰测试流程,重写后可以控制是否显示。 需要注意的是,重写系统方法可能会对第三方库或未知代码产生影响,因此在实际项目中要谨慎使用。如果只是为了在...

    海地加密狗重写程序

    "重写程序"的目的就是解决这些问题,通过更新狗内的固件或者模拟狗的功能,使得软件能够正确识别并激活。 压缩包中的文件包括: 1. RYDLL32.DLL:这是一个动态链接库文件,通常在Windows操作系统中用于提供某些特定...

    C#实现按钮Button的重写

    // 在这里添加你的自定义逻辑,如动画效果、额外的验证等 base.OnClick(e); // 调用基类的OnClick方法,确保事件正常触发 } ``` 3. **外观定制**:为了让按钮看起来更“漂亮”,我们可以修改其外观,包括颜色、...

    ASP.NETweb网站Url重写,地址栏重写

    URL重写的核心在于改变用户浏览器地址栏显示的URL,而不实际更改服务器上的资源位置。这种技术主要通过两种方式实现:IIS服务器层面的URL重写和应用程序层面的URL重写。 1. **IIS URL重写模块**:IIS(Internet ...

Global site tag (gtag.js) - Google Analytics