JSF
标签与参数使用说明
一、 < >
   1:参数有以下:
    binding,class,for,id,parent,rendered,renderertype,transient,type
    专有特性有 type,binding.
   2:功能说明:
    注册一个与它关联的最近的一 UI元件的ActionListerner实例。
   3:参数说明。
    type:指明创建并注册一个完全合格的 Java类。
    binding:它的值是从 javax.faces.event.ActionListener导入的一个对象的价值体现。
    id:是此对象在 javaScript中的一个唯一标识。
  4:实例:
   <h:commandButton id="regist" value="Regist">
       <f:actionListener type="mypackage.ActionListenerImpl">                </f:actionListener>   
   </h:commandButton>  
   package mypackage;  
   import javax.faces.event.ActionEvent;   
   import javax.faces.event.ActionListener;   
   public class ActionListenerImpl implements ActionListener {   
       public void processAction(ActionEvent actionEvent) throwsAbortProcessingException {   
         ...   
       }   
   } 
二、 < >
   1:参数有以下:
   name,value
   name:设置此元件的名字。
   value:设置此元件的值。
   2:功能说明。
   此控件用于向它的父类控件添加一个访问属性。
   3:实例:
   <h:form>  
    <h:commandButton action="#{paramBean.test3}" value="Test11" actionListener="#{paramBean.changeName}">  
       <f:attribute name="name" value="hujilie"/>  
    </h:commandButton>  
    <h:commandLink action="#{paramBean.test3}" value="Test12" actionListener="#{paramBean.changeName}">  
       <f:attribute name="name" value="hujilie"/>  
    </h:commandLink>  
</h:form> 
 
   public void changeName(ActionEvent e)  
    {  
        UIComponent component = e.getComponent();  
        Map<String, Object> map = component.getAttributes();  
        setName((String)map.get("name"));  
    } 
三、
    1:此控件的属性有以下:
       dateStyle, locale,pattern,timeStyle,timeZone,type,binding
     1) dateStyle: 设置日期的显示格式与样式.
    2) local:显示的定义样式中使用的日期和时间格式或分析过程 , 如果没有指定FacesContext.getViewRoot().getLocale()的返回值,那么值必须是 来自 实例的一VB表达式。或者是java.util.Locale构造函数第一次副的字符串,如果是第二次的复值是空串。
    3) pattem:此为客户设定样式,它确定了日期/时间应该显示的格式。
    4) timeStyle:设置时间的显示格式。
    5) timeZone:定义时区。值必须是来自java.util.Locale 实例的一VB表达式。或者是java.util.Locale构造函数第一次副的字符串,如果是第二次的复值是空串。
    6) type:显示了在字符串中有效的时间目录。
    7) binding: javax.faces.convert.DateTimeConverter 的一个评估值。
 2:功能说明。
    在它的父类标签中注册一个日期时间实例。
 3:实例:
    <h:outputText value="#{data.t_Date}"> 
       <f:convertDateTime pattern="yyyy年 MM月dd日" timeZone="GMT+8" locale="cn" /> 
</h:outputText>
四、
    1:参数说明。
       converterId, binding
1) converterId:注册或创建一个 converter实例标签。
2) javax.faces.convert.Converter 的一个评估值。
2:功能说明:
    注册一个已经命名的与父类标签相关联的 Converter实例。
3:实例:
     
        <f:converter converterId="myConverterId" />
      </h:inputText>
 
解说:使用 h:converter可以简单地调用JSF Converter对使用h:inputText,h:outputText等标签的输入输出值进行转换,而不需要为其实现一个Converter标签。但该方法不能从JSP传送参数给Converter类,需要给Converter传送参数时,需要自定义Converter标签来实现。
五、 < >
    1:参数说明。
currencyCode, currencySymbol,groupingUsed,integerOnly,locale,maxFractionDigits,maxIntegerDigits,minFractionDigits,,minIntegerDigits,pattern,type,binding
1) currencyCode: ISO 4217货币代码,仅适用于格式化货币时
2) currencySymbol:货币符号,仅适用于格式化货币时。
3) groupingUsed:标志,指定是否格式化输出将包含分组分隔符。默认值为 true.
4) IntegerOnly: 标志,指定是否将被格式化和解析值的整数部分。默认值为 False.
5) Locale: 区域设置的数字的预定义样式格式化和分析过程中使用。如果没有指定,通过 FacesContext.getViewRoot().getLocale()返回的地区将被使用。表达式都必须评估一个java.util.Locale或一个字符串是有效的,作为第一个参数传递给构造的(String语言,弦乐国家), 空字符串作为第二个参数传递
6) maxFractionDigits:最大数量将在格式化输出的小数部分的数字。
7) pattern:自定义格式模式,这 determins数字串应如何格式化和解析。
8) type:指定数字的字符串将被格式化和解析。
9) binding:计算结果为 javax.faces.convert.NumberConverter的实例的一个ValueExpression
    2:功能说明:
    注册一个已经命名的与父类标签相关联的 NumberConverter实例。
3:实例:
<h:inputText id="number">
<f:convertNumber currencySymbol="$" type="currency" groupingUsed="#{false}"></f:convertNumber>
</h:inputText>
六、 < >
    1:参数说明。
        Name:要创建的 face的名称。
    2:功能说明:
       注册一个命名 face的UIComponent最接近的父UIComponent的自定义操作。
    3:实例:
       <h:dataTable value="#{myBean.bookList}" var= "book" border="1px">
              <h:column>
                  <f:facet name="header">
                     <h:outputText value="Title"/>
              </f:facet>
              <h:outputText value="#{book.title}"/>
           </h:column>
           <h:column>
              <f:facet name="header">
                  <h:outputText value="Price"/>
          </f:facet>
          <h:outputText value="#{book.price}"/>
           </h:column>
       </h:dataTable>
七、 < >
    1:参数说明:
       Basename, var
1) basename:加载 bundle资源的基本名。
2) var: request scope属性的名称下的资源包将暴露作为一个地图。
    2:功能介绍:
当加载一个现成的本地视图资源,并公开为一个 java.util.Map根据“VAR”这个标签的属性值指定的键的当前请求的请求属性。地图的行为必须这样,如果一个get()调用了一个不存在的,在地图的关键的,每个文字串??主要?都将被返回。 如果ResourceBundle不存在,一个JspException必须被抛出。
    3:实例:
f:loadBundle用法:
f:loadBundle的使用非常简单:
1,首先,为不同的语言分别准备一个.properties文件。比如,若要支持英文,中文,日文,则英文可以为Messages.properties,中文为Messages_zh.properties,日文为Messages_ja.properties等。
文件内容的形式为:
message-key=message-value
userName=用户名:
.properties文件打包之前必须转换成ascii码形式,可以以目录阶层形式加以组织,并置于WEB-INF目录下。比如资源文件的目录阶层可以为:
WEB-INF\com\test\resource\Messages.properties
WEB-INF\com\test\resource\Messages_zh.properties
WEB-INF\com\test\resource\Messages_ja.properties
2,然后在JSP里通过f:loadBundle标签加载该.properties文件,比如加载具有上面阶层的资源文件:
<f:loadBundle basename="com.test.resource.Messages" var="msg" />
其中basename为资源文件所在的位置(com\test\resource)与名称(Messages)。var为加载后的变量名。JSF可以根据用户浏览器的配置自动装载匹配的资源文件。
然后使用h:outputText输出页面内容
<h:outputText value="#{msg['message-key']}"></h:outputText>
或者
<h:outputText value="#{msg.message-key}"></h:outputText>
就可以了。
另外,需要JSF支持所规定的语言,需要在faces-config.xml加上类似以下配置:
view plaincopy to clipboardprint?
<faces-config>   
<application>  
  <locale-config>  
   <default-locale>en</default-locale>  
   <supported-locale>zh</supported-locale>  
   <supported-locale>ja</supported-locale>  
  </locale-config>  
</application>  
</faces-config> 
<faces-config>
<application>
  <locale-config>
   <default-locale>en</default-locale>
   <supported-locale>zh</supported-locale>
   <supported-locale>ja</supported-locale>
  </locale-config>
</application>
</faces-config>
该配置告诉JSF框架,默认的语言配置以及需要支持哪些语言配置。
<ui:composition template="./WEB-INF/templates/layout.xhtml">
    <ui:define name="title">
        <f:loadBundle basename="presentationBeans.homepage.messages" var="msgs"/>
        #{msgs.indexWindowTitle}
    </ui:define>
    <ui:define name="content">
        ...
    </ui:define>
</ui:composition>
八、 < >
    1:参数说明。
        Binding, id,name,value
1)binding: ValueExpression到一个 backing bean属性绑定此自定义操作创建的UIComponent组件实例。
2)id:要创建组件的 UIParameter组件的标识符。
3)name:要创建的参数的名称。
4)value:要设置的参数值。
2:功能介绍:
    添加一个子 UIParameter的UIComponent组件关闭父UIComponent的自定义操作。
3:实例:

 

        前台
        后台
        FacesContext context = FacesContext.getCurrentInstance();
     String subid = (String)context.getExternalContext().getRequestParameterMap().get("subid");
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();   
request.getParameter("name"); 
<h:outputLink styleClass="MenuBarItemSubmenu" value="repair.xhtml"> 
            <h:outputText value="abc"></h:outputText> 
            <f:param name="page" value="123"></f:param>
        </h:outputLink>
相当于 repair.xhtml?page=123
九、 < >
    1:参数说明:
       Type: 完全合格的 Java类名的创建和注册的PhaseListener。
Binding: 值绑定表达式计算为一个对象,它实现 javax.faces.event.PhaseListener。
    2:功能介绍:
       注册一个嵌套在这个标记 UIViewRoot PhaseListener实例。
    3:实例:
JSF新手可能常常听到   "JSF Request Processing Lifecycle" ,但是不一定知道在生命周期中都发生了什么事情.
这里有一点代码, 一个  PhaseListener, 我们可以用她来了解  JSF's Request Processing Lifecycle如何工作的.
下面是一个在生命周期开始和结束时执行的一个简单的PhaseListener
Java代码  
  1. package com.jsf;   
  2. import javax.faces.event.PhaseListener;   
  3. import javax.faces.event.PhaseEvent;   
  4. import javax.faces.event.PhaseId;   
  5.   
  6. public class MyPhaseListener  implements PhaseListener   
  7. {   
  8.   
  9.   public MyPhaseListener()   
  10.   {   
  11.   }   
  12.   
  13.   public void beforePhase(PhaseEvent pe)   
  14.   {   
  15.    if (pe.getPhaseId() == PhaseId.RESTORE_VIEW)   
  16.       System.out.println("Processing new  Request!");   
  17.            
  18.    System.out.println("before - " + pe.getPhaseId().toString());   
  19.   }   
  20.   
  21.   public void afterPhase(PhaseEvent pe)   
  22.   {    
  23.   System.out.println("after - " + pe.getPhaseId().toString());   
  24.      
  25.   if (pe.getPhaseId() == PhaseId.RENDER_RESPONSE)   
  26.      System.out.println("Done with Request!\n");   
  27.   }   
  28.   
  29.   public PhaseId getPhaseId()   
  30.   {     
  31.     return PhaseId.ANY_PHASE;   
  32.   }   
  33. }  
package com.jsf;
import javax.faces.event.PhaseListener;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
 
public class MyPhaseListener implements PhaseListener
{
 
 public MyPhaseListener()
 {
 }
 
 public void beforePhase(PhaseEvent pe)
 {
   if (pe.getPhaseId() == PhaseId.RESTORE_VIEW)
      System.out.println("Processing new Request!");
       
   System.out.println("before - " + pe.getPhaseId().toString());
 }
 
 public void afterPhase(PhaseEvent pe)
 {
 System.out.println("after - " + pe.getPhaseId().toString());
 
 if (pe.getPhaseId() == PhaseId.RENDER_RESPONSE)
     System.out.println("Done with Request!\n");
 }
 
 public PhaseId getPhaseId()
 { 
    return PhaseId.ANY_PHASE;
 }
}
当每一个阶段开始和结束的时候 ,她在控制台上打印出一些东西. 你需要在 faces-config.xml中来注册该listener
Java代码  
  1. <lifecycle>   
  2. <phase-listener>com.jsf.MyPhaseListener />   
  3. </lifecycle>  
<lifecycle>
<phase-listener>com.jsf.MyPhaseListener />
</lifecycle>
一旦你注册了   PhaseListener, 你就可以开始写个小程序来测试了. 我们使用一个简单的程序,一个输入表单和按钮:
<h:commandButton value="button" action="#{backingbean.button_action}"/>
按钮绑定了一个manage bean的动作方法.:
Java代码  
  1. public String button_action()   
  2.   {   
  3.     System.out.println("Action event processed...");   
  4.     return "success";   
  5.   }  
public String button_action()
 {
    System.out.println("Action event processed...");
    return "success";
 }
运行该页面可以看到下面的输出 ,.:
十、 < >
    1:参数说明:
Binding, id,itemDescription,itemDisabled,itemLabel,escape,itemValue,value,noSelectionOption
1) Binding: 此自定义操作创建的 UIComponent组件实例的属性绑定到backing bean的值绑定表达式。
2) Id:要创建组件的 UISelectItem组件的标识符。
3) itemDescription:说明此选项,在开发工具的使用。
4) itemDisabled:标志,指示是否创建这个组件的选项被禁用。表达式的计算结果必须为布尔值。默认值为 false。
5) itemLabel:标签要显示此选项的用户。
6) escape: itemLabel属性值的敏感字符必须转义的指示标志。这个标志是默认情况下设置为“真”。
7) itemValue:值将返回到服务器,如果这个选项由用户选择。
8) value:值绑定表达式指向一个 SelectItem实例包含此选项的信息。
9) noSelectionOption:标志,指示是否创建这个组件的选项代表的特殊 “没有选择”选项。表达式的计算结果必须为布尔值。默认值为false。
 
2:功能介绍:
    添加一个子 UISelectItem的UIComponent组件关闭父UIComponent的自定义操作。
    3:实例:
       1)<h:selectOneMenu id="type1" value="#{packdelete.type1}" >
              <f:selectItem itemLabel="SN" itemValue="serialNumber" />
              <f:selectItem itemLabel="BOX" itemValue="boxNo" />
              <f:selectItem itemLabel="CARTON" itemValue="cartonNo" />
              <f:selectItem itemLabel="PALLET" itemValue="palletNo" />
              <f:selectItem itemLabel="WorkOrder" itemValue="workOrder" />
        </h:selectOneMenu>
    2)
十一、 >
    1:参数说明:
Binding, id,value,var,itemValue,itemLabel,itemDescription,itemDisabled,itemLabelEscaped,itemLabelEscaped
1)binding: 此自定义操作创建的 UIComponent组件实例的属性绑定到backing bean的值绑定表达式。
2)id: 要创建组件的 UISelectItems组件的标识符。
3)value:向任何集合或数组值表达式。成员元素可能 SelectItem或任何Java对象的实例。成员元素的普通Java对象的情况下,必须使用一些额外的属性页面的作者正确识别封闭UISelectOne或UISelectMany组件的数据,如下面的示例所示。
<h:selectOneListbox size="1" id="escape02" value="#{select05NoSelection.initialCollectionValues}">
  <f:selectItems value="#{select05NoSelection.hobbitList}"
                 var="n"
                 itemValue="#{n}"
                 itemLabel="#{n.bio}"
                 itemDescription="#{n.description}"
                 itemDisabled="#{n.disabled}"
                 itemLabelEscaped="true"
                 noSelectionValue="#{select05NoSelection.hobbitList[0]}"/>
</h:selectOneListbox>
在前面的例子,上线 1分的价值属性集合<HobbitBean>。HobbitBean只是一个普通的Java对象(PO​​JO),其属性符合 JavaBean命名约定。2分线列表<HobbitBean>的价值属性,尽管它可能只是指向一个集合,数组或javax.faces.model.DataModel。该属性上线3条,通过9,包容性,充分利用事实的值是一个POJO的集合。
4)var:暴露在这个请求范围的关键值,以便它可以被称为在 EL的价值属性从其他属性的值。
5)itemValue:计算集合,数组,或者要显示的项目将呈现地图。
6)itemLabel:计算结果为一个字符串,将作为该项目中的标签。
7)itemDescription:计算结果为一个字符串,将作为该项目中的描述。
8)itemDisabled:计算结果为一个布尔值,将决定,如果该项目价值是可选择的,或者不。
9)itemLabelEscaped:计算结果为一个布尔值,将决定呈现的标记,如果该项目得到正常的 JSF HTML转义或不。
10)     itemLabelEscaped:是 EL表达式指向元素的收藏价值,其价值应标明为“没有选择”项目,或一个文字字符串完全匹配集合中的项目的价值,“没有选择,必须标明。如果用户选择了这样一个项目,该领域所需的标记,那么它不会通过验证。
2:功能介绍:
    添加一个孩子 UISelectItems的UIComponent组件与封闭的父UIComponent的自定义操作。
    当在选择项目的迭代时, toString()方法被称为MEST上呈现的属性值的字符串。规范第2版引入了几个新的属性,如下所述。它们是:VAR,itemValue,itemLabel,itemDescription,itemDisabled,并itemLabelEscaped。
3:实例:
    <h:selectOneMenu id="modelF" value="#{modelUpdate.modelCs}" >
           <f:selectItems value="#{modelUpdate.modelItem}" />
       </h:selectOneMenu>
       Java代码:
       public void setmodelItem(){
        HibernateUtil item=new HibernateUtil();
        Session sitem=item.getSessionFactory().openSession();
        try {
            ResultSet rs=sitem.connection().createStatement().executeQuery("select customer_name from sys_customer");
            while(rs.next()){
                modelItem.add(new SelectItem(rs.getString(1)));
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(modelUpdate.class.getName()).log(Level.SEVERE, null, ex);
        }
        sitem.close();
        item.getSessionFactory().close();
}
Return modelItem;
十二、 <f:setPropertyActionListener>
    1:参数说明:
       Value: ValueExpression储存为目标属性的值。
       Target: ValueExpression,是值属性的目标。
    2:功能介绍:
最接近的父 UIComponent的自定义操作相关的UIComponent注册的ActionListener实例。这ActionListener的会导致给定值“值”属性设置成“目标”属性的ValueExpression。
实施这个标签创建了一个特殊的 ActionListener实例,与我们最直接的周围的一个标签,其实现类是一个UIComponentTag的子类的实例相关联的ActionSource寄存器。此标记创建输出到当前正在创建的页面。
这个标签创建和安装的 ActionListener实例有下列行为和合同。
。只有创建和注册的 ActionListener实例这个标签的组成部分,是创建的第一次
。 “目标”和“价值”标签的属性ValueExpression实例和监听器的实例变量不计算存储。
。当侦听器执行,执行以下步骤:
    call的 “value”ValueExpression的getValue()。
    如果是空的 “”
如果不为空的 “value”表达的值,调用上的“value”和“target” ValueExpressions gettype()来确定自己的财产类型。
·         Coerce the value of the "value" expression to the "target" expression value type following the Expression Language coercion rules. Call setValue() on the "target" ValueExpression with the resulting value.
如果失败或者胁迫或执行的 setValue()抛出AbortProcessingException。
    3:实例:
<a4j:commandButton id='update_lcp_button' p_w_picpath="../p_w_picpaths/icon/do_modify.gif" reRender="contentPanel">
<f:setPropertyActionListener value="#{lcp}" target="#{lcpSaveController.lcp}" />
<a4j:actionparam value="#{lcp.id}" actionListener="#{lcpSaveController.toUpdate}" assignTo="#{lcpSaveController.lcp.id}">
           </a4j:actionparam>
</a4j:commandButton>
十三、 < >
    1:参数说明
       Binding, id,rendered
1)binding: 此自定义操作创建的 UIComponent组件实例的属性绑定到backing bean的值绑定表达式。
2)id: 要创建组件的 UINamingContainer组件的标识符。
3)rendered: 此组件(及其子女)是否应该呈现的指示标志。
2:功能介绍:
    集装箱所有 JavaServer行动面临的核心和自定义组件通过"jsp:include"或任何自定义操作,动态包括同一Web应用程序,如JSTL的“C:进口”,另一页的嵌套页面上使用的行动。
3:实例:
使用方法 1:
<f:subview id="id1">
<h:outputText value="3"></h:outputText>
<f:verbatim><br>World</f:verbatim>
</f:subview>
 
使用方法 2:
<f:subview id="id2">
<c:import url="subpage.jsp" />
</f:subview>
 
使用方法 3:
<f:subview id="id3">
<%@ include file="subpage.jsp" %>
</f:subview>
 
使用方法 4:
<f:subview id="id4">
<jsp:include page="subpage.jsp" />
</f:subview>
</f:view>
subpage.jsp - 子页面文件
<f:verbatim>subpage.</f:verbatim>
<h:outputText value="output component"></h:outputText>
十四、 <f:validateBean>
    1:参数说明:
validationGroups:一个逗号分隔的列表,验证组。验证组的是一个完全合格的的类名。
binding:一个 ValueExpression,计算为一个BeanValidator实例。
    2:功能介绍:
一个校验器,验证委托的 Bean验证API的本地值。validationGroups属性作为一个过滤器,指示Bean验证API执行的约束条件。Bean验证报告,如果有任何约束侵犯,该值将被视为无效。
       3:实例:
          
十五、 < >
    1:参数说明:
       ,minimum,binding
:这个组件允许的最大值。
2)Minimum :这个组件允许的最小值。
3)Binding :一个ValueExpressio n ,计算为一个DoubleRangeValidator实例。
2:功能介绍:
    与最接近的父 UIComponent的自定义操作,注册一个UIComponent的相关DoubleRangeValidator实例。
3:实例:
    验证组件值的双精度范围
十六、 < >
    1:参数说明:
       Maximum, minimum,binding
:这个组件允许的最大值。
2)Minimum :这个组件允许的最小值。
3)Binding :一个ValueExpression,计算为一个DoubleRangeValidator实例。
2:功能介绍:
    与最接近的父 UIComponent的自定义操作,注册一个UIComponent的相关LengthValidator实例。
3:实例:
<h:inputText id=" userId" value="#{mybean.userId}" required="true">
 <f:validateLength maximum="16" minimum="8" />
</h:inputText>
<h:message for="userId"></h:message>
十七、 < >
    1:参数说明
1)Maximum:这个组件允许的最大值。
2)Minimum:这个组件允许的最小值。
3)Binding:一个 ValueExpression,计算为一个DoubleRangeValidator实例。
2:功能介绍:
    与最接近的父 UIComponent的自定义操作,注册一个UIComponent的相关LongRangeValidator实例。验证组件值的长整型范围
3:实例:
    <h:inputText id="amount" value="#{mybean.amount}" required="true">  
   <f:validateLongRange maximum="2500" minimum="800" />  
    </h:inputText>  
    <h:message for="amount"></h:message> 
十八、 < >
    1:参数说明:
       validationGroups:一个逗号分隔的列表,验证组。验证组的是一个完全合格的的类名。
Binding: 一个 ValueExpression,计算为一个BeanValidator实例。
    2:功能介绍:
一个校验器,验证委托的 Bean验证API的本地值。validationGroups属性作为一个过滤器,指示Bean验证API执行的约束条件。Bean验证报告,如果有任何约束侵犯,该值将被视为无效。
    3:实例:
十九、 < >
    1:参数说明:
       Pattern:正则表达式模式。请记住,像所有的 Java字符,反斜杠必须用一个反斜杠转义。
       Binding:一个 ValueExpression,计算为一个RegexpValidator实例。串
    2:功能介绍:
       一个 Validator使用pattern属性来验证包装组件。整个模式匹配的String值的组件。
    3:实例:
      
二十、 < >
    1:参数说明:
       Binding:一个 ValueExpression评估RequiredValidator实例。
    2:功能介绍:
       一个验证程序,强制执行的一种价值的存在。一个 UIInput所需的属性设置为true,它具有相同的影响。
    3:实例:
      
二一、 <f:validator>
    1:参数说明:
       validatorId:创建和注册的 Validator验证标识符。
       binding:一个 ValueExpression评估对象实现的javax.faces.validator.Validator接口。
    2:功能介绍:
       注册上的 UIComponent名为Validator实例,与最接近的父UIComponent的自定义操作。
    3:实例:
表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。
Validator是基于 javascript技术的伪静态类和对象的自定义属性,可以对网页中的表单项输入进行相应的验证,允许同一页面中同时验证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类,所以在调用时不需要实例化,直接以"类名+.语法+属性或方法名"来调用。此外,Validator还提供3种不同的错误提示模式,以满足不同的需要。
   Validator目前可实现的验证类型有:
   1.是否为空;
   2.中文字符;
   3.双字节字符
   4.英文;
   5.数字;
   6.整数;
   7.实数;
   8.Email地址;
   9.使用HTTP协议的网址;
   10.电话号码;
   11.货币;
   12.手机号码;
   13.邮政编码;
   14.×××号码;
   15.QQ号码;
   16.日期;
   17.符合安全规则的密码;
   18.某项的重复值;
   19.两数的关系比较;
   20.判断输入值是否在(n, m)区间;
   21.输入字符长度限制(可按字节比较);
   22.对于具有相同名称的单选按钮的选中判断;
   23.限制具有相同名称的多选按钮的选中数目;
   24.自定义的正则表达式验证;
  运行环境 (客户端):

 

   

 

               

 

        

 

二二、<>

 

1:参数说明

 

        Type:完全合格的Java类的名称将要创建和注册ValueChangeListener。

 

        Binding:值绑定表达式计算为一个对象,它实现javax.faces.event.ValueChangeListener。
    2:功能介绍:
注册 ValueChangeListener的UIComponent实例与最接近的父UIComponent的自定义操作。
    3:实例:
<h:selectOneMenu id="som" value="#{MyBean.som}" title="select any one in this menu"
οnchange="submit()">
<f:selectItem id="si1" itemLabel="Thums Up" itemValue="11" />
<f:selectItem id="si2" itemLabel="Limca" itemValue="22" />
<f:selectItem id="si3" itemLabel="Pepsi" itemValue="33" />
<f:selectItem id="si4" itemLabel="Sprite" itemValue="44" />
<f:selectItem id="si5" itemLabel="Frooti" itemValue="55" />
<f:selectItem id="si6" itemLabel="Coca-Cola" itemValue="66" />
<f:valueChangeListener type="roseindia.MyBean" />
</h:selectOneMenu>
二三、 <f: verbatim>
    1:参数说明:
Escape: 必须转义的方式是适当的标记语言呈现的指示标志,生成的标记。表达式的计算结果必须为布尔值。默认值为 false。
Rendered: 标志,指示此组件是否应该被渲染( Render Response阶段期间),或在随后的任何形式处理提交。此属性的默认值是true。
    2:功能介绍:
       创建并注册一个孩子 UIOutput组件与最接近的父UIComponent的自定义操作,这使得嵌套的主体内容关联。
    3:实例:
一般来说, JSF建议使用JSF的标签。当然,JSF是一个标准的Web框架,所以也可以使用其他的非JSF标签。那么,想要放入非JSF元件,例如简单的模板(template)文字,那么就需要使用<f:verbatim /> 标签来处理。
    <f:verbatim>是一个 JSF UIOutput组件并且绘制时转义XML元素,所以能在HTML页内正确显示。这个例子没有太多的内容,但它示范了在同一页面内不同的标记能一起使用。
例子:
    <t:panelGrid id="pan" styleClass="gray" width="60%" columns="2" align="center">
    <t:panelGroup>
        <f:verbatim>序号:</f:verbatim>
    </t:panelGroup>
    <t:panelGroup>
       <f:verbatim>
             <t:inputText id="no" value="#{BookMark.no}" required="true" />
        </f:verbatim>       
    </t:panelGroup>  
    <t:panelGroup>
        <t:commandButton styleClass="button" id="addBtn" value="保 存" type="submit" action="#{BookMark.addBookMark}"/>
</t:panelGrid>
</t:panelGrid>
上面这段代码的输入域内置在<f:verbatim/>标签内了,那么提交后,在后台是得不到该域的值的。只有把<f:verbatim>标签去掉,方能正确取值。
需要在 JSF标签(如:dataTable,dataScrollor等)中,包含非JSF内容(如:HTML标签,普通文本)时,必须用<f:verbatim>包含这些非JSF内容。有人会问:<f:verbatim>标签必须包含在<f:view>内,按照上面所说,<f:view>标签中的内容都要放到<f:verbatim>中了,实践表明不是这样的。看下面的例子(只为说明问题):
        <%@ page language="java" pageEncoding="UTF-8" %>
        <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
        <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
        <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta. http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <%@ include file="/inc/header.jspf" %>
        </head>
 
        <body>
        <f:view>
        <%@ include file="/inc/menu.jspf" %>
        <table class="head">
        <tr>
        <td>欢迎体验“投票管理系统” </td>
        </tr>
        </table>
        <table class="content">
        <h:form>
        <tr>
        <td valign="top">
        <table>
        <tr>
        <td>请选择: </td>
        </tr>
        </table>
        <t:dataTable newspaperColumns="2"id="data" value="#{voteQuestionHandler.demandAuditedDataModel}" var="voteQuestion"
        preserveDataModel="false"
        rows="#{pagerHandler.pagerVO.rows}"
        columnClasses="tdColumn"
        rowClasses="tdRow" styleClass="data"
        forceIdIndexFormula="#{voteQuestion.id}">
        <t:column>
        <f:verbatim><li /></f:verbatim>
        <t:commandLink value="#{voteQuestion.question}" action="goToVote" target="_blank">
        <t:updateActionListener value="#{voteQuestion}" property="#{voteItemHandler.voteQuestionVO}" />
        </t:commandLink>
        </t:column>
        </t:dataTable>
        <%@ include file="/inc/pager.jspf" %>
 
        </td>
        </tr>
        </h:form>
        </table>
        </f:view>
        <%@ include file="/inc/footer.jspf" %>
        </body>
        </html>
        另外,在包含文件( <%@ include...)中,有时是需要<f:verbatim>和<f:subview>标签的,如果你的包含文件不能很好的工作的话,可以试一下!!!由于Myfaces1.1.1之后版本的升级,要求表单标签(如:<h:inputText>)必须要包含在<h:form>标签内,可能<f:view><h:form>这样的写法是最省事的了!!!
        <!--[if !supportEmptyParas]--> <!--[endif]-->
        Faces Verbatim 组件
        此高级组件是一个定制 <f:verbatim/>标记,用于将 HTML 元素添加到某些组件中,并使 HTML 元素具有这些组件的行为。将 HTML 标记包装在<f:verbatim/>标记中,使其具有 JavaServer Faces 组件的行为,这样便解决了同时包含 JavaServer Faces 组件和 HTML 元素的页中出现的一些问题。
        •  标记组件更易于用来将 HTML 标记添加到 JSP 页面。
        如果将 HTML 元素或纯文本放在 JavaServer Faces 组件(如表或网格面板)内,并且不使用 Faces Verbatim 组件,则会出现以下情况:
•     HTML 组件在设计时根本不会出现,原因是表和网格面板被设置为呈现其自己的子对象。但是,HTML 元素实际上并不是 JavaServer Faces 组件的子对象,因此,可视设计器和组件会忽略被嵌入的元素。
•     在运行时,嵌入HTML 元素的标签顺序与任何嵌入 JavaServer Faces 组件的标签顺序不同。因此,如果用户试图在嵌入 JavaServer Faces 组件的组件之间进行标签切换,将无法保证有序地排列标签顺序。
        •  如果使用Faces Verbatim 组件,请确保遵循以下准则:
        o IDE 使用的 JSP 页中的代码必须是对称的、格式正确的 XML,包括<f:verbatim>标记内的标记。例如,在<f:verbatim>标记中不能以<table>开头,但可以将结束</table>标记放在结束</f:verbatim>标记后面。
        o <f:verbatim>组件中不能嵌入其他 JavaServer Faces 组件。
        <!--[if !supportEmptyParas]--> <!--[endif]-->
        可以使用 f:subview包含指定的JSF页面,或者其他JSF组件
        使用 f:subview包含JSF页面时,被包含的页面里只能包含有JSF组件,所有非JSF组件元素必须用f:verbatim标签进行转换。
        f:subview的使用例:
        main.jsp:
        <%@ page contentType="text/html; charset=UTF-8" %>
        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
        <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
        <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
        <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 
        <f:view>
        <hr>
        使用方法 1:
        <f:subview id="id1">
        <h:outputText value="3"></h:outputText>
        <f:verbatim><br>World</f:verbatim>
        </f:subview>
        <hr>
        使用方法 2:
        <f:subview id="id2">
        <c:importurl="subpage.jsp" />
        </f:subview>
        <hr>
        使用方法 3:
        <f:subview id="id3">
        <%@ include file="subpage.jsp" %>
        </f:subview>
        <hr>
        使用方法 4:
        <f:subview id="id4">
        <jsp:include page="subpage.jsp" />
        </f:subview>
        </f:view>
        <!--[if !supportLineBreakNewLine]-->
        <!--[endif]-->
        subpage.jsp - 子页面文件
        <%@ page contentType="text/html; charset=UTF-8" %>
        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
        <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
        <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
        <f:verbatim>subpage.</f:verbatim>
        <h:outputText value="output component"></h:outputText>
        <!--[if !supportEmptyParas]--> <!--[endif]-->
二四、 < >
    1参数说明:
       Locale, renderKitId,beforePhase,afterPhase
1)locale: 要使用的区域本地化此页。表达式必须评估一个 java.util.Locale的或一个字符串转换为一个Locale。
2)rederkitld: RenderKit用于渲染此页的标识符。
3)beforephase: MethodBinding指向需要 javax.faces.event.PhaseEvent并返回void的方法。除了恢复视图的每一个阶段之前,这个方法将被调用。
4)afterPhase: MethodBinding指向需要 javax.faces.event.PhaseEvent并返回void的方法。除了恢复视图的每一个阶段后,这个方法将被调用。
2:功能介绍:
    所有 JavaServer集装箱面临的核心和自定义组件的页面上使用的行动。
3:实例:
    <f:view beforePhase="#{userList init}">         
    <h:form>              
        <h:dataTable border="1" value="#{userList.users}" var="usr" binding="#{userList
data}">      
            <h:column id="column1">            
                <f:facet name="header">            
                    <h:outputText value="Name"></h:outputText>             
                </f:facet>              
                <h:outputText value="#{usr.name}"></h:outputText>          
            </h:column>              
            <h:column id="column2">            
                <f:facet name="header">            
                    <h:outputText value="Age"></h:outputText>              
                </f:facet>              
                <h:outputText value="#{usr.age}"></h:outputText>        
            </h:column>              
             
            <h:column id="column3">            
                <f:facet name="header">            
                    <h:outputText id="text3" value="Birthday"></h:outputText>         
   
                </f:facet>              
                <h:outputText value="#{usr.birthday}"></h:outputText>          
            </h:column>              
            <h:column id="column4">            
                <f:facet name="header">            
                    <h:outputText id="text4" value="Gender"></h:outputText>           
   
                </f:facet>              
                <h:outputText value="Male" rendered="#{usr.gender}"></h:outputText>       
   
                <h:outputText value="Female" rendered="#{!usr.gender}"></h:outputText>    
      
            </h:column>              
            <h:column id="column5">            
                <f:facet name="header">           
                    <h:outputText id="text5" value="Email"></h:outputText>        
   
                </f:facet>              
                <h:outputText value="#{usr.email}"></h:outputText>         
            </h:column>              
            <h:column id="column6">            
                <f:facet name="header">            
                    <h:outputText id="text6" value="Country"></h:outputText>          
   
                </f:facet>              
                <h:outputText value="#{usr.country}"></h:outputText>           
            </h:column>              
            <h:column id="column7">            
                <f:facet name="header">            
                    <h:outputText id="text7" value="Operation"></h:outputText>    
      
                </f:facet>               
                <h:commandLink value="Update" action="#{userList.update}" ></h:commandLink> 
          
                               
                <h:commandLink value="Delete"></h:commandLink>             
            </h:column>              
             
        </h:dataTable>           
    </h:form>             
</f:view>               
             
public void init(PhaseEvent phaseEvent) {               
    if (users.size() == 0) {          
        for (int i = 0; i < 10; i++) {              
            User user = new User();             
            user.setName("Peter");           
            user.setAge(i * 2 + 1);          
            user.setBirthday(new Date());           
            user.setCountry("China");           
            user.setEmail("as" + i + "@sina.com");         
            if (i % 2 == 0)              
                user.setGender(true);           
            else              
                user.setGender(false);          
            user.setIntroduction("Hello,Every One!");             
            users.add(user);          
             
        }               
    }               
    System.out.println("total users are: " + users.size());  
}            
在这段代码中,初始化了 DataTable中的数据,也就是页面中的数据,下面是页面执行时候打印出来的生命周期记录:
Processing a new Request!
Before Phase: RESTORE_VIEW 1
After Phase: RESTORE_VIEW 1
Before Phase: RENDER_RESPONSE 6
total users are: 10
After Phase: RENDER_RESPONSE 6
End JSF Request!
可以看出, user.init方法字啊第六个阶段的开始被执行,因此我们可以认为,beforePhase方法相当于注册一个PhaseListener,并且专门在本页面生效,因此也相当于JSP中的Page scope的效果,解决了JSF1.1开发中遇到的Page Scope的问题
H
二五、 < >