惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - CQIT-CS

关于ASP.NET2.0 WebPart两个问题的解决... - CQIT-CS - 博客园 批处理命令简要教程 Dom4j 使用简介 JDom使用详解 面向服务的体系结构概述:第四部分(转) 面向服务的体系结构概述:第三部分(转) 面向服务的体系结构概述:第二部分(转) 面向服务的体系结构概述:第一部分(转) 用JAVASCRIPT实现JAVA的HashMap类... - CQIT-CS - 博客园 ASP.NET开启服务器端调试的方法... [原创]ECLIPSE环境下利用ANT进行JSF开发入门(三) [原创]ECLIPSE环境下利用ANT进行JSF开发入门(一) 对象克隆... JAR详解 垂直滚动的DIV(含鼠标事件) 线程正在被中止问题的原因及解决 下载电子书的网址收集... CSS中expression的使用方法... 部署一个BIRT报告到你的应用服务器(转自ECLIPSE中国社区)
[原创]ECLIPSE环境下利用ANT进行JSF开发入门(二)
CQIT-CS · 2006-05-06 · via 博客园 - CQIT-CS

    3.编写测试文件

       通过以上两步,已经把开发所需的环境搭建完成了。现在可以开始JSF页面文件和Manage Bean类的编写了.在本文中会介绍几种简单的JSF标签.

       JSF标签由两部分组成,一部分是html标签,另一部分是core标签,它们的URI分别是:http://java.sun.com/jsf/htmlhttp://java.sun.com/jsf/html .下面是JSPJAVA示例代码,我先把代码贴出来再对进行说明(文件名为UserBean.javaindex.jsp):

 1/*ManageBean:UserBean.java*/
 2
 3package src.com.corejsf;
 4
 5 
 6
 7public class UserBean {
 8
 9    
10
11    private String name;
12
13    private String password;
14
15    
16
17    public UserLogin() {}
18
19 
20
21    public String getName() {
22
23        return name;
24
25    }

26
27 
28
29    public void setName(String name) {
30
31        this.name = name;
32
33    }

34
35 
36
37    public String getPassword() {
38
39        return password;
40
41    }

42
43 
44
45    public void setPassword(String password) {
46
47        this.password = password;
48
49    }

50
51}

52
53

  1/*JSP Page:index.jsp*/
  2
  3<%@page contentType="text/html"%>
  4
  5<%@page pageEncoding="UTF-8"%>
  6
  7 
  8
  9<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
 10
 11<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
 12
 13 
 14
 15<html>
 16
 17<f:view>
 18
 19    <head>
 20
 21        <f:loadBundle basename="src.com.corejsf.textResource" var="msg" /> 
 22
 23        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 24
 25        <title>JSP Page</title>
 26
 27        <style>
 28
 29        .error{
 30
 31            color:red;
 32
 33            font-size:14pt;
 34
 35            font-style:italic;
 36
 37        }

 38
 39        
</style>
 40
 41    </head>
 42
 43    <body>
 44
 45    <h:form>
 46
 47    <table>
 48
 49        <tr>
 50
 51            <td>
 52
 53                <h:outputLabel value="#{msg.textName}" />
 54
 55            </td>
 56
 57            <td>
 58
 59                <h:inputText value="#{login.name}" />
 60
 61            </td>
 62
 63        </tr>
 64
 65        <tr>
 66
 67            <td>
 68
 69                <h:outputLabel value="#{msg.textPassword}" />
 70
 71            </td>
 72
 73            <td>
 74
 75                <h:inputSecret value="#{login.password}" />
 76
 77            </td>
 78
 79        </tr>
 80
 81         <tr>
 82
 83            <td>
 84
 85                MESSAGES:
 86
 87            </td>
 88
 89            <td>
 90
 91                <h:inputText  value="#{login.name}" id="name" />
 92
 93            </td>
 94
 95        </tr>
 96
 97        
 98
 99        <tr>
100
101            <td><h:commandButton action="usrLogin" value="Login"/></td>
102
103            <td>
104
105                <h:commandLink action="usrLogin">
106
107                    <f:param name="para" value="paraValue" />
108
109                    <h:outputText value="LinkToNextPage" />
110
111                </h:commandLink>
112
113            </td>
114
115        </tr>
116
117        
118
119    </table>
120
121    </h:form>
122
123    </body>
124
125</f:view>
126
127</html>
128
129 
130
131/*JSP Page: responsePage.jsp*/
132
133    <%@page contentType="text/html"%>
134
135    <%@page pageEncoding="UTF-8"%>
136
137 
138
139    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
140
141<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
142
143 
144
145    <html>
146
147    <f:view>
148
149    <head>
150
151        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
152
153        <title>JSP Page</title>
154
155    </head>
156
157    <body>
158
159    <h:outputFormat value="welcome {0} ,your password is {1}" >
160
161        <f:param value="#{login.name}" />
162
163        <f:param value="#{login.password}" />
164
165    </h:outputFormat>
166
167    <br/>
168
169    <%=request.getParameter("para")%>
170
171    </body>
172
173    </f:view>
174
175</html>
176
177

说明:文件最上面两行红色的代码作用是导入JSF开发所需的标签库.整个代码中绿色的部分就是应用的JSF标签,在这个JSP文件中所应用到的JSF html标签有:

       <h:outputLabel />

       <h:outputText />

       <h:inputText />

       <h:inputSecret />

       <h:commandButton action="usrLogin" value="Login"/>

       <h:commandLink action="usrLogin">

              <h:outputFormat value="welcome {0} your password is {1}" >

JSF core标签有:

       <f:view>

       <h:form>

       <f:loadBundle basename="src.com.corejsf.textResource" var="msg" />

       <f:param name="para" value="paraValue" />

JSF页面都被包含在<f:view></f:view>之间,表单域包含在<h:form></h:form>之间,以上的html标签都有一个共同的属性value,这个value可以是一个给定的字符串,也可以是绑定到ManageBean的一个字段.第二种用法更加灵活和广泛,也是我要说明的方法.

       上面的UserBean.java就是一个受管Bean,其实它就是一个普通的JAVA类,或者说它是一个普通的Bean.那么为什么有是受管Bean?其原因是在faces-config.xml中对其进行了配置,现在回过头去看第二步中展示的受管Bean的配置信息格式(如下):

       <managed-bean>

        <managed-bean-name>login</managed-bean-name>                                           <managed-bean-class>

           src.com.corejsf.UserBean

       </managed-bean-class>

        <managed-bean-scope>session</managed-bean-scope>

</managed-bean>

其中<managed-bean-name>指定了受管Bean的名称,这里是user; <managed-bean-class>指定了受管Bean的完整类路径.根据上面我建立的目录结构可知这里的完整类路径是src.com.corejsf.UserBean; <managed-bean-scope>指定了这个类的生存期,可设置为sessionrequestapplicationnone之一.TOMCAT启动的时候会读取 faces-config.xml文件,这时就会把已配置好的UserBean类作为受管Bean.

    现在,就可以把UserBean的字段和JSF标签中的value属性绑定了.方法是:value=#{login.name},这个绑定表达式就是把value的值和UserBeanname字段绑定.在页面显示的时候就会自动调用getter/setter方法.注意,在页面上进行绑定的时候引用的是在faces-config.xml中配置的<managed-bean-name>,因为在上面我用的是login,所以在页面上就是用的#{login.name},在运行的时候就会自动调用getName/setName方法.

    另外,在上面的index.jsp文件中有一个core标签是<f:loadBundle basename="src.com.corejsf.textResource" var="msg" />,这个标签的作用是引用一个资源文件,这个文件是一个属性文件(*.properties)basename指定了文件的完整类路径,var属性说明在当前页面中用msg这个名称在引用资源.这种资源也可以绑定到标签的value属性中,方法和受管Bean的绑定方法一样.

标签应用说明:

       <h:outputLabel value="#{msg.textName}" />:显示资源文件中textName字段的值

       <h:outputText  value="#{msg.textName}"/>:outputLabel

       <h:inputText value="#{login.name}" />:产生一个输入框,并和login.name绑定,输入的值存到name字段中.

       <h:inputSecret value="#{login.password}" />:产生一个密码输入框,并和login.password绑定, 输入的值存到password字段中.

       <h:commandButton action="usrLogin" value="Login"/>:产生一个命令按钮,当按下的时候激发usrLogin事件.

    说明:在按钮和超级连接中都有一个action属性,这个属性是用来产生页面导航的.下面是上文所讲的页面导航配置格式,其含义是当在index.jsp页面产生了一个usrLogin事件时,就跳转到responsePage.jsp:

       <navigation-rule>

             <from-view-id>/index.jsp</from-view-id>

             <navigation-case>

                 <from-outcome>usrLogin</from-outcome>

                 <to-view-id>/responsePage.jsp</to-view-id>

             </navigation-case>

    </navigation-rule>

    <h:commandLink action="usrLogin">:作用如上面所说,另外,这个标签还可以和<f:param name="para" value="paraValue" />标签组合使用, <f:param name="para" value="paraValue" />标签就是传到下一个页面的参数,这个标签的功能就如同在URL后添加?para=paraValue这样的参数.根据配置,index.jsp页面中:

       <h:commandLink action="usrLogin">

        <f:param name="para" value="paraValue" />

           <h:outputText value="LinkToNextPage" />

    </h:commandLink>

这一段的功能同

       <a href=”http://localhost:8888/JSFApp/faces/responsePage.jsp?para=paraValue”>LinkToNextPage</a>

       把上面的JSP文件内容复制到工程文件夹的/web/index.jsp中,JAVA文件复制到/src/com/corejsf/UserBean.java.再在faces-config.xml中添加如下的配置信息:

 1<navigation-rule>
 2
 3        <from-view-id>/index.jsp</from-view-id>
 4
 5        <navigation-case>
 6
 7            <from-outcome>usrLogin</from-outcome>
 8
 9            <to-view-id>/responsePage.jsp</to-view-id>
10
11        </navigation-case>
12
13    </navigation-rule>
14
15   
16
17   <managed-bean>
18
19        <managed-bean-name>login</managed-bean-name>
20
21        <managed-bean-class>src.com.corejsf.UserBean</managed-bean-class>
22
23        <managed-bean-scope>session</managed-bean-scope>
24
25    </managed-bean>
26