`
Supanccy2013
  • 浏览: 224955 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsf之组件的immedate属性,context.renderResponse

    博客分类:
  • JSF
jsf 
阅读更多
     在实际开发中有时会遇到这样一种情况:
     页面上有三个组件一个组件是名字的输入框,该输入框的是必填项,一个是国家的下拉框,一个是城市的下拉框,要实现更改国家下拉框的数值会自动修改城市下拉框的数值。并且名字输入框是必须填写的。
     我们知道名字的校验过程发生在jsf生命周期中 “过程验证”和“更新模型属性”两个阶段之间。因此如果我们不填写名字的输入框,直接点击国家列表中的数值,那么城市列表尽管已经出现但是页面中会出现“名称不能为空”的错误提示。这个时候我们就要改变国家类表的组件的immedate的属性为true,并且在该组件的valueChangeListener事件处理最后写生contex.renderResponse 这个样子,这个组件的校验会在jsf阶段之 过程验证之前,请求应用数值阶段时候调用,并且调用listeners之后不再调用其他别的阶段,直接相应用户,如此一来不填写名称输入框,直接点击国家列表 刷新页面之后就不会再出现名验证的错误信息,下面是实例:

1,页面registForm.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core" xml:lang="en" lang="en">
<h:head>
	<title>registForm</title>
</h:head>
<h:body>
	<h:form>
	    <h:inputText id="name" value="#{registForm.name}" required="true">
	    </h:inputText>
	    <h:message for="name"></h:message>
	    <!-- immedate属性是跳过四个jsf阶段的重要属性 -->
	    <h:selectOneMenu id="select" valueChangeListener="#{registForm.myEvent}" onchange="submit();"
              value="#{registForm.selectedContent}" immediate="true">
             <f:selectItems value="#{registForm.countryItems}"></f:selectItems>
        </h:selectOneMenu><br/>
        <h:selectOneMenu id="selectCity" 
              value="#{registForm.selectCity}">
             <f:selectItems value="#{registForm.cityItems}"></f:selectItems>
        </h:selectOneMenu><br/>
        <h:outputText id="result" value="#{registForm.result}"></h:outputText>
	</h:form>
</h:body>
</html>


2,受管bean  RegisterAction.java
package com.jsf.bean;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
public class RegisterAction {
	    private String name;
	    //改变下拉框后,输出框中的内容id
	    private String result;
	    //下拉框国家的id
	    private String selectedContent = null;
	    //国家列表
	    private ArrayList countryItems = null;
        //下拉框城市的id	    
	    private String selectCity = null;
	    //城市下拉框中的列表
	    private List cityItems = null;
	    //定义三个城市的类表
        private static List china = new ArrayList();
        private static List america = new ArrayList();
        private static List japan = new ArrayList();
        static{
        	china.add(new SelectItem("北京","北京",null));
        	china.add(new SelectItem("上海","上海",null));
        	china.add(new SelectItem("广州","广州",null));
        	china.add(new SelectItem("深圳","深圳",null));
        	america.add(new SelectItem("纽约","纽约",null));
        	america.add(new SelectItem("华盛顿","华盛顿",null));
        	america.add(new SelectItem("旧金山","旧金山",null));
        	america.add(new SelectItem("加州","加州",null));
        	japan.add(new SelectItem("东京","东京",null));
        	japan.add(new SelectItem("神户","神户",null));
        	japan.add(new SelectItem("广岛","广岛",null));
        	japan.add(new SelectItem("长崎","长崎",null));
        }
	    public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getSelectCity() {
			return selectCity;
		}
		public void setSelectCity(String selectCity) {
			this.selectCity = selectCity;
		}
		public String getSelectedContent() {
	    return selectedContent;
	    }
	    public List getCityItems() {
			return cityItems;
		}
		public void setCityItems(List cityItems) {
			this.cityItems = cityItems;
		}
		public void setSelectedContent(String selectedContent) { //保持下拉框的状态不改变
	    this.selectedContent = selectedContent;
	    }
	    public String getResult() {
	        return result;
	    }
	    public void setResult(String result) {
	        this.result = result;
	    }
	    //国家下拉类表中的值改变之后的action事件
	    public void myEvent(ValueChangeEvent e) { //下拉框改变时触发的事件
	    	System.out.println("you change the value fo ");
	        FacesContext context = FacesContext.getCurrentInstance();
	        String clientId = e.getComponent().getId();
	        if (clientId.equals("select")) {
	            setResult(e.getNewValue().toString());
	            if(e.getNewValue().toString().equals("中国")){
	            	setCityItems(china);
	            }
	            if(e.getNewValue().toString().equals("美国")){
	            	setCityItems(america);
	            }
	            if(e.getNewValue().toString().equals("日本")){
	            	setCityItems(japan);
	            }
	        }
	        //下面的这句将会掉过jsf六个阶段中的“过程验证”,“更新模型的数值”
	        //“调用应用程序”,"呈现相应"的阶段。
	        //而必填项名称的验证则会在提交动作激发后的六个jsf生命周期中验证
	        context.renderResponse();
	    }
	    //在创建bean之后,呈现视图之前给国家列表中的内容赋值
	    public Collection getCountryItems() { //给下拉框赋值
	        SelectItem aa= new SelectItem();
	        if (countryItems == null) {
	        countryItems = new ArrayList();
	        countryItems.add(new SelectItem("中国", "中国", null));
	        countryItems.add(new SelectItem("美国", "美国", null));
	        countryItems.add(new SelectItem("日本", "日本", null));
	        }
	        return countryItems;
	    }
	    public void setCountryItems(ArrayList<SelectItem> countryItems) {
	        this.countryItems = countryItems;
	    }
	}

分享到:
评论

相关推荐

    javax.enterprise.context.jar

    在Java企业级应用开发中,`javax.enterprise.context.jar`是一个非常关键的库,它包含了用于管理组件生命周期的Contexts and Dependency Injection (CDI) API。CDI是Java EE平台的一个重要部分,它提供了依赖注入...

    spring-web-2.5.jar

    org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer.class org.springframework.web.context.support.ServletContextResource.class org.springframework.web.context.support....

    jsf-facelets.jar 1.1.15.B1

    jsf-facelets.jar 1.1.15.B1

    jsf 基础教程......

    在本教程中,我们将深入探讨JSF的核心概念、基本组件以及如何在实际项目中应用JSF。 1. **JSF框架概述** JSF框架的核心目标是简化Java Web开发,通过提供声明式编程模型来减少代码量。它将UI组件、业务逻辑和数据...

    IDEA创建JSF项目所需jar包.zip

    在JavaServer Faces (JSF) 开发环境中,IntelliJ IDEA (IDEA) 是一个流行的集成开发环境。...理解并熟练运用javax.faces.jar和javax-inject.jar中的组件和服务,对于提升JSF应用的开发效率和质量至关重要。

    jsf-api-2.0.3.jar.zip_jsf api_jsf jar包_jsf-api-2.0.3.jar_jsf-api

    5. **AJAX支持**:内建的AJAX功能使得用户界面更动态,可以通过JSF组件触发异步更新。 6. **Composite Components**:允许开发者创建可重用的UI组件,提高了代码复用和组件化开发的能力。 `jsf-api-2.0.3.jar` 包含...

    jsf动态创建表单控件实例.

    - **后台生成**:在JSF Managed Bean中,可以使用Java代码动态创建UIComponent实例,并设置其属性,然后添加到组件树中。 - **EL表达式**:使用Expression Language (EL)动态生成JSF标签,例如通过循环结构创建一...

    jsf所要的所有包.rar

    JavaScript全栈框架(JSF,JavaServer Faces)是Oracle公司推出的用于构建Web应用程序的一种技术,它简化了前端和后端的交互,提供了丰富的组件库和事件处理机制。JSF是基于MVC(Model-View-Controller)设计模式的...

    JSF- Mastering JavaServer Faces.zip

    3. **数据绑定和验证**:JSF支持将组件的值与后台bean的属性直接绑定,简化了数据的获取和更新。同时,提供了内置的验证机制,可以自定义验证规则,确保输入数据的有效性。 4. **事件处理**:JSF中的组件可以触发和...

    JSF 学习资料和jar 包.zip

    在JSF中,开发者可以使用预定义的UI组件来构建页面,这些组件可以与后端的数据模型进行交互,简化了前端与后端的集成。 这个"JSF 学习资料和jar 包.zip"压缩文件包含了JSF开发所需的关键资源,主要是8个jar包和学习...

    unofficial-primefaces, PrimeFaces JSF组件的非官方镜像.zip

    unofficial-primefaces, PrimeFaces JSF组件的非官方镜像 PrimeFaces非官方产品。 PrimeFaces JSF组件的非官方镜像为什么?新Maintanance策略没有从 PrimeFaces 3.5开始的免费版本。这个工作计划旨在提供免费可用的...

    JSF开发实战教程.....

    本教程向 Java 程序员介绍如何使用 JSF 组件来构建具有高度交互性的部署在 Apache Geronimo 上的 Java EE 应用程序。本教程假定读者使用 Eclipse 集成开发环境(IDE)作为开发平台。

    JSF 组件开发.rar

    1. **组件层次结构**:JSF组件树是应用程序的核心,每个组件都有属性、事件和行为。组件可以嵌套,形成复杂的UI结构。 2. **UIComponent接口**:所有JSF组件都实现了UIComponent接口,提供基本的属性和方法,如id、...

    JSF分页组件2

    **JSF分页组件2详解** JavaServer Faces (JSF) 是Java平台上的一个用于构建Web应用程序的MVC(Model-View-Controller)框架。在处理大量数据时,分页功能是必不可少的,它能够帮助用户更有效地浏览和管理信息。在...

    《JSF入门》简体中文版.pdf

    JavaServer Faces(JSF)是一种基于Java的服务器端用户界面组件框架,旨在简化基于Java EE的Web应用程序的开发。JSF的主要特点在于将用户界面组件与后端逻辑分离,从而允许开发人员专注于各自的技术栈而不互相干扰。...

    《JSF入门》简体中文版.

    JavaScript Server Faces(JSF)是Java平台上的一种用于构建Web应用程序的框架,它简化了用户界面组件的开发和管理。JSF的核心理念是将界面组件、业务逻辑和数据模型分离,提供了一种声明式的方式来处理用户交互。这...

    JSF入门配置[参照].pdf

    - Managed Bean是JSF中的核心组件,它们是Java类,可以包含业务逻辑和属性。在上述例子中,`UserBean`有一个`name`属性,以及对应的getter和setter方法。 以上就是JSF入门配置的基本步骤。了解并实践这些配置对于...

    学习技术 jsf必备 ————JSF标签.pdf

    除了上述特定功能的标签外,JSF还为所有标签提供了一系列通用属性,这些属性有助于更好地控制标签的行为。 - **id**: 为组件指定一个唯一的标识符,可用于其他组件的引用。 - **binding**: 绑定到UIComponent。 - *...

    《JSF标签》简体中文版.

    JSF标签还具备一些通用属性,这些属性适用于所有组件,包括但不限于: - **id**:标识组件,用于引用。 - **binding**:绑定到UIComponent对象。 - **rendered**:控制组件是否渲染。 - **styleClass**:定义CSS...

Global site tag (gtag.js) - Google Analytics