JSF提供了大量的UI标签来简化创建视图。这些UI标签类似于ASP.NET中的服务器组件。使用这些标签,可以通过其value,binding,action,actionListener等属性直接绑定到托管Bean的属性,实例或者方法上。

1、JSF中的三大核心组件:
a、 JSF容器管理的托管Bean
b、 JSF提供的UI标签,应用界面的UI标签直接绑定到托管Bean
c、 页面导航规则

下面我们就来介绍UI标签:

2、JSF中的UI标签:

JSF与JSP的标签的区别在于,JSF的标签可以使用value,binding,action和actionListener等属性直接绑定到托管Bean上面去。

JSF包括两组标签库:jsf_core.tld核心标签库和html_basic。tld HTML标签库。

2.1、JSF核心标签库:
  1. f:actionListener
  2. f:attribute
  3. f:convertDateTime
  4. f:convertNumber
  5. f:converter
  6. f:facet
  7. f:loadBundle
  8. f:param
  9. f:phaseListener
  10. f:selectItem
  11. f:selectItems
  12. f:setPropertyActionListener
  13. f:subview
  14. f:validateDoubleRange
  15. f:validateLength
  16. f:validateLongRange
  17. f:validator
  18. f:valueChangeListener
  19. f:verbatim
  20. f:view

关于个标签的详细介绍,可以参考JSF自带的帮助文档:

  1. JSF解压目录\tlddocs\index.html
2.2、JSF的HTML标签:
  1. h:commandButton
  2. h:commandLink
  3. h:dataTable
  4. h:form
  5. h:graphicImage
  6. h:inputHidden
  7. h:inputSecret
  8. h:inputText
  9. h:inputTextarea
  10. h:message
  11. h:messages
  12. h:outputFormat
  13. h:outputLabel
  14. h:outputLink
  15. h:outputText
  16. h:panelGrid
  17. h:panelGroup
  18. h:selectBooleanCheckbox
  19. h:selectManyCheckbox
  20. h:selectManyListbox
  21. h:selectManyMenu
  22. h:selectOneListbox
  23. h:selectOneMenu
  24. h:selectOneRadio
  25. h:column

关于个标签的详细介绍,可以参考JSF自带的帮助文档:

  1. JSF解压目录\tlddocs\index.html
2.3、UI标签的通用属性:

JSF的UI大都会生成一个或多个HTML标签,所以使用这些UI标签有时一些属性是通用的:

  1. id
  2. immediate:是否立即处理UIInput组件和实现了ActionSource接口的UI组件上事件
  3. rendered:指定条件表达式,当条件表达式为true时才会绘制组件
  4. required:指定用户是否必须为组件输入值
  5. requeredMessage:与requered一起使用,如果没有输入时提示信息
  6. value:该组件的值绑定到托管对象上
  7. onblur
  8. onchange
  9. onclick
  10. ondblclick
  11. onfocus
  12. onkeydown
  13. onkeypress
  14. onkeyup
  15. onmousedown
  16. onmousemove
  17. onmouseout
  18. onmouseover
  19. onmouseup
  20. style
  21. styleClass
  22. binding:将组件本身绑定到托管Bean
2.4、<f:view>标签的常用属性:

locale:指定国家语言
renderKitId:JSF根据该属性值选择对应的绘制器工具箱来绘制该页面
beforePhase:绑定生命周期监听器(必须有public void beforePhase(Java.faces.event.PhaseEvent)形式的签名),JSF会在每个生命周期阶段(除了恢复视图)之前调用该方法。
afterPhase:绑定生命周期监听器(必须有public void afterPhase(java.faces.event.PhaseEvent)形式的签名),JSF会在每个生命周期阶段(除了恢复视图)之后调用该方法。

3、UI标签的使用举例:
3.1、<h:form>和基本输入标签的使用:
  1. <f:view>
  2. <h1>表单标签</h1>
  3. <h:form>
  4. 单行文本框:<h:inputText value="#{userbean.username }" /><br />
  5. 密码框:<h:inputSecret value="#{userbean.password }" /><br />
  6. 多行文本区:<h:inputTextarea rows="3" cols="20" /><br />
  7. 隐藏域:<h:inputHidden value="#{userbean.message }" /><br />
  8. </h:form>
  9. </f:view>

其中<h:inputText>和<h:inputSecret>可以指定一个size属性用于指定输入框的最大长度。

3.2、多选标签的使用:
  1. <h1>多选标签的使用</h1>
  2. <h:form>
  3. <!-- 复选框 -->
  4. <h:selectManyCheckbox value="#{userbean.booklist }">
  5. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  6. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  7. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  8. </h:selectManyCheckbox>
  9.  
  10. <!-- 生成一个允许多选的列表框 -->
  11. <h:selectManyListbox value="#{userbean.booklist }" size="5">
  12. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  13. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  14. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  15. </h:selectManyListbox>
  16.  
  17. <!-- 生成一个允许多选的复合框 -->
  18. <h:selectManyMenu value="#{userbean.booklist }">
  19. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  20. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  21. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  22. </h:selectManyMenu>
  23. </h:form>

使用上面的三个标签必须与<f:selectItem>或者<f:selectItems>标签结合使用,其中的<f:selectItem>3个属性的含义:

itemLabel:可视化标签值
itemValue:指定生成列表项或者复选框的值
value:与其他的UI标签的value属性不同,不是将该组件的值绑定到托管Bean,而是将该组件本身绑定到托管Bean

这三个标签的value属性值必须是一个List或者数组。

3.3、单选标签的使用:
  1. <h1>单选标签的使用</h1>
  2. <h:form>
  3. <!-- 生成一组单选按钮 -->
  4. <h:selectOneRadio value="userbean.booklist">
  5. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  6. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  7. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  8. </h:selectOneRadio>
  9. <!-- 生成一个只允许单选的列表框 -->
  10. <h:selectOneListbox value="userbean.booklist" size="5">
  11. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  12. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  13. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  14. </h:selectOneListbox>
  15. <!-- 生成一个只允许单选的下来菜单 -->
  16. <h:selectOneMenu value="#{userbean.booklist }">
  17. <f:selectItem itemLabel="Core Java" itemValue="Java" />
  18. <f:selectItem itemLabel="Thinking in C++" itemValue="C++" />
  19. <f:selectItem itemLabel="Spring Internals" itemValue="Spring" />
  20. </h:selectOneMenu>
  21. </h:form>

这三个标签和前面介绍的三个标签的功能基本相似,只是这里的只能单选。

3.4、UISelectBoolean组件的使用:
  1. <h:selectBooleanCheckbox />

在页面上生成一个复选框,用于勾选或者取消勾选该复选框

与上面三个复选框不同,它的value属性必须绑定到托管Bean中boolean类型的属性,不需要与<f:selectItem>标签一起使用。

3.5、UICommand组件的使用:
  1. <h1>UICommand组件的使用</h1>
  2. <h:form>
  3. <!-- 生成一个可以提交表单的按钮 -->
  4. <h:commandButton value="点击" />
  5. <!-- 生成一个图片按钮 -->
  6. <h:commandButton image="images/01.jpg" />
  7. <!-- 生成一个可以提交表单的超链接 -->
  8. <h:commandLink value="提交表单" />
  9. <!-- 生成一个可以提交表单的图片链接 -->
  10. <h:commandLink shape="circle" coords="20,20,10">
  11. <img src="data:images/01.jpg" />
  12. </h:commandLink>
  13. </h:form>
3.6、UIOutput对应的输出组件的使用:
  1. <h1>UIOutput对应的输出组件的使用</h1>
  2. <!-- 使用outputText标签输出国际化资源 -->
  3. <h:outputText value="#{userInfo.username }" />
  4. <!-- 使用outputText标签输出Bean属性 -->
  5. <h:outputText value="#{userbean.username }" />
  6. <!-- 生成Label标签 -->
  7. <h:outputLabel value="#{userbean.username }" />
  8. <!-- 生成超链接 -->
  9. <h:outputLink value="http://www.itzhai.com">IT宅</h:outputLink>
  10. <!-- 输出带占位符的国际化消息 -->
  11. <h:outputFormat value="#{userInfo.message }">
  12. <f:param value="arthinking" />
  13. </h:outputFormat>

这里使用到了国际化资源,需要创建:

在faces-config.xml问价中加载国际化资源的配置:

  1. <application>
  2. <resource-bundle>
  3. <base-name>com.itzhai.user</base-name>
  4. <var>userInfo</var>
  5. </resource-bundle>
  6. </application>

然后在com.itzhai目录下创建一个国际化资源文件的basename为user:

  1. username="arthinking"
  2. message=用户名:{0}
3.7、panelGrid和panelGroup的使用:
  1. <h1>panelGrid标签的使用</h1>
  2. <h:panelGrid columns="3" width="300px" border="1">
  3. <!-- 生成表格标题 -->
  4. <f:facet name="caption">
  5. <h:outputText value="表格标题" />
  6. </f:facet>
  7. <!-- 生成表格头 -->
  8. <f:facet name="header">
  9. <h:outputText value="表格头" />
  10. </f:facet>
  11. <h:outputText value="1" />
  12. <h:outputText value="2" />
  13. <h:outputText value="3" />
  14. <!-- panelGroup的使用 -->
  15. <h:panelGroup layout="block" style="color:#cfcfff">
  16. <h:outputText value="4" />
  17. <h:outputText value="5" />
  18. </h:panelGroup>
  19. <h:outputText value="6" />
  20. <h:outputText value="7" />
  21. </h:panelGrid>

panelGrid用于生成表格,panelGroup用于把多个元素组成一个元素。

3.8、使用UIData迭代输出从数据源中获取的数据:
  1. <h1>dataTable的使用</h1>
  2. <h:dataTable width="600px" border="1" value="showbook.bookList" var="book" rowClasses="odd,even">
  3.  
  4. <!-- 使用facet生成caption -->
  5. <f:facet name="caption">
  6. <h:outputText value="book list" />
  7. </f:facet>
  8.  
  9. <!-- 定义第一列 -->
  10. <h:column>
  11. <f:facet name="header">
  12. <h:outputText>图书名</h:outputText>
  13. </f:facet>
  14. <h:inputText value="#{book.name }" size="3" />
  15. </h:column>
  16. <!-- 定义第二列 -->
  17. <h:column>
  18. <f:facet name="header">
  19. <h:outputText>图书分类</h:outputText>
  20. </f:facet>
  21. <h:outputLink value="#{book.url }">
  22. <h:inputText value="#{book.bookClass }" />
  23. </h:outputLink>
  24. </h:column>
  25.  
  26. <!-- 生成表格底部 -->
  27. <f:facet name="footer">
  28. <h:panelGroup>
  29. <h:outputText value="计算机书籍" />
  30. </h:panelGroup>
  31. </f:facet>
  32. </h:dataTable>

下面需要在名为showbook的托管Bean中提供一个bookList数据源,可以在他的get方法中提供数据:

  1. public List<BookInfo> getBookList(){
  2. List<BookInfo> books = new ArrayList<BookInfo>();
  3. books.add(new BookInfo("Core Java", "Java", "www.itzhai.com"));
  4. books.add(new BookInfo("Core Java", "Java", "www.itzhai.com"));
  5. books.add(new BookInfo("Core Java", "Java", "www.itzhai.com"));
  6. return books;
  7. }

其中的BookInfo类如下:

  1. public class BookInfo {
  2.  
  3. private String name;
  4. private String url;
  5. private String bookClass;
  6.  
  7. public BookInfo(String name, String bookClass, String url){
  8. this.name = name;
  9. this.bookClass = bookClass;
  10. this.url = url;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public String getUrl() {
  19. return url;
  20. }
  21. public void setUrl(String url) {
  22. this.url = url;
  23. }
  24. public String getBookClass() {
  25. return bookClass;
  26. }
  27. public void setBookClass(String bookClass) {
  28. this.bookClass = bookClass;
  29. }
  30. }
3.9、图像组件的使用:
  1. <h:graphicImage value="images/01.jpg" alt="图像01" />

这个标签将生成HTML的img标签。

【转】JSF中的三大核心组件 UI标签的详细介绍和使用举例的更多相关文章

  1. HTML5中<template>标签的详细介绍

    HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...

  2. Swift UI控件详细介绍(上)

    UI控件 首先介绍一下AppDelegate.swift@UIApplicationMain 调用了OC中的UIApplicationMain函数:UIApplicationMain是iOS应用程序的 ...

  3. SD卡中FAT32文件格式快速入门(图文详细介绍)【转】

    本文转自:http://blog.csdn.net/mjx91282041/article/details/8904705 说明: MBR :Master Boot Record ( 主引导记录) D ...

  4. SD卡中FAT32文件格式快速入门(图文详细介绍)

    说明: MBR :Master Boot Record ( 主引导记录) DBR :DOS Boot Record ( 引导扇区) FAT :File Allocation Table ( 文件分配表 ...

  5. maven中的pom配置文件标签的详细介绍

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  6. MyBatis:SQL语句中的foreach标签的详细介绍

    foreach 也就是遍历迭代,在SQL中通常用在 in 这个关键词的后面 foreach元素的属性主要有 item,index,collection,open,separator,close. 分别 ...

  7. HTML:Input元素标签的详细介绍

    总结Input的标签: Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍.1,type=text输入类型是t ...

  8. html meta标签用法详细介绍

    meta是html语言head区的一个辅助性标签. 在页面中都有类似这样的html代码: <head> <meta http-equiv="content-Type&quo ...

  9. Android 项目中文件夹作用(res文件夹详细介绍)

    1. src:存放所有的*.Java源程序. 2. gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3. assets:可以存放项目一些较大的资源文件,例如: ...

随机推荐

  1. 三方面搞定http协议之“请求方法”

    我所熟知的请求方法一共有六种: GET 请求指定的页面信息,并返回实体主体. POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) PUT 从客户端向服务器传送的数据取代指定的文档的内 ...

  2. Java 容器 & 泛型:六、容器讲到为什么要使用泛型

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket ArrayList是集合类中无处不在的,泛型也是,泛型对集合类尤其有用.但是为啥要使用泛型?理解好了这 ...

  3. ZOJ Problem Set - 3708 Density of Power Network

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3708 #include <stdio.h> #include ...

  4. tensorflow 1.12.0 gpu + python3.6.8 + win10 + GTX1060 + cuda9.0 + cudnn7.4 + vs2017)

    在安装tensorflow-gpu时,也看过不少的博客,讲得乱七八糟的,也不能这样说,只是每个人安装的环境或需求不一样,因此没有找到一个适合自己的教程去安装tensorflow-gpu版本.当然,入手 ...

  5. Go基础系列:函数(1)

    Go中函数特性简介 对Go中的函数特性做一个总结.懂则看,不懂则算. Go中有3种函数:普通函数.匿名函数(没有名称的函数).方法(定义在struct上的函数). Go编译时不在乎函数的定义位置,但建 ...

  6. iptables实战案例详解-技术流ken

    简介 关于iptables的介绍网上有很多的资料,大家可以自己找一些关于iptables的工作原理,以及四表五链的简介,对于学习iptables将会事半功倍.本博文将会例举几个工作中常用的iptabl ...

  7. sql server 行转列存储过程

    if object_id('[P_GetPriceTableBuy]','P') is not null drop procedure P_GetPriceTableBuy SET ANSI_NULL ...

  8. nginx 禁止未绑定的域名访问

    nginx 禁止未绑定的域名访问 方法1: server { listen 80 default_server; #不指定 server_name, server_name 默认为"&quo ...

  9. vs 调试 iis中的网站

    打开网站,在vs中附加进程,选择w3wp.exe,如果不能下断点,设置一下pdb文件位置

  10. Java高并发 -- 并发扩展

    Java高并发 -- 并发扩展 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 死锁 死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象, ...