3.编写测试文件
通过以上两步,已经把开发所需的环境搭建完成了。现在可以开始JSF页面文件和Manage Bean类的编写了.在本文中会介绍几种简单的JSF标签.
JSF标签由两部分组成,一部分是html标签,另一部分是core标签,它们的URI分别是:http://java.sun.com/jsf/html和http://java.sun.com/jsf/html .下面是JSP和JAVA示例代码,我先把代码贴出来再对进行说明(文件名为UserBean.java和index.jsp):
/*ManageBean:UserBean.java*/2

3
package src.com.corejsf;4

5
6

7
public 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

/*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>指定了这个类的生存期,可设置为session,request,application,none之一.在TOMCAT启动的时候会读取 faces-config.xml文件,这时就会把已配置好的UserBean类作为受管Bean.
现在,就可以把UserBean的字段和JSF标签中的value属性绑定了.方法是:value=#{login.name},这个绑定表达式就是把value的值和UserBean的name字段绑定.在页面显示的时候就会自动调用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中添加如下的配置信息:
<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



浙公网安备 33010602011771号