posts - 15,  comments - 5,  trackbacks - 0

        从昨天晚上到现在,终于在自己的浏览器上完成了自己的第一个JSF程序,晕哦!终于明白很多东西要亲手实现才能完成,书上有一些是不会提到的,写完的时候都是报错。再返回去看书上的,没错啊!一步一步做的,没办法,今天在网上到处找问题的原因。呵呵!经过千辛万苦,终于搞定了。把代码和部署的过程帖上来,希望各位大侠多多指点。由于我的英语不太好,很多东西翻译不准确,我就用原文中的英语表示,希望大家原谅。
有点懒,直接把myfaces里的myfaces-blank-example.war拷贝到$TOMCAT_HOME\webapps的主目录下,把目录名改成hello。
在里面生成两个jsp文件,一个是hello.jsp,另一个是goodbye.jsp。
hello.jsp的结构:
1.在页面的最上面用绿色显示Welcome to JavaServer Face!
2.一个message taglib,当提交的表单数据不合法时显示错误信息
3.一个含有text box的表单(输入的数据必须是1到500才会提交)
4.储存你最后一次提交的数据在JavaBean的numControls里
5.在Text的下面有一个Grid,用于显示从0到numControls-1的数
6.一个Redisplay按钮,用于提交表单
7.一个Goodbye按钮,用于显示goodbye.jsp
goodbye.jsp的结构如下:
1.在页面的最上面用绿色显示Goodbye!
2.下面显示JavaBean里的numControls的值
另外,我们当然还需要一个JavaBean文件,So,新建一个HelloBean文件,代码如下

 1package com.gem.hello;
 2
 3import javax.faces.application.Application;
 4import javax.faces.component.html.HtmlOutputText;
 5import javax.faces.component.html.HtmlPanelGrid;
 6import javax.faces.context.FacesContext;
 7import javax.faces.event.ActionEvent;
 8
 9import java.util.List;
10
11public class HelloBean {
12   private int numControls;
13   private HtmlPanelGrid controlPanel;
14   
15   public int getNumControls() {
16      return numControls;
17   }

18   public void setNumControls(int numControls) {
19      this.numControls = numControls;
20   }

21   public HtmlPanelGrid getControlPanel() {
22      return controlPanel;
23   }

24   public void setControlPanel(HtmlPanelGrid controlPanel) {
25      this.controlPanel = controlPanel;
26   }

27   
28   public void addControls(ActionEvent actionEvent) {
29      Application application = FacesContext.getCurrentInstance().getApplication();
30      List children = controlPanel.getChildren();
31      children.clear();
32      for (int count = 0; count < numControls; count++{
33         HtmlOutputText output = (HtmlOutputText)application.
34                                  createComponent(HtmlOutputText.COMPONENT_TYPE);
35         output.setValue(" " + count + " ");
36         output.setStyle("color: blue");
37         children.add(output);
38      }

39   }

40   
41   public String goodbye() {
42      return "success";
43   }

44}


用ant把它编译了,ant的使用这里就不再重复,网上很多,这方面的资料。记得把jsf-api.jar和jsf-impl.jar加在compile.classpath里就好:)
新建一个jsp文件,hello.jsp
代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

 1<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 3<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 4
 5
 6<f:view>
 7  <html>
 8   <head>
 9    <title>
10     helloWorld!
11    </title>
12   </head>
13   <body>
14      <h:form id="WelcomeForm">
15     <h:outputText id="WelcomeOutput"
16        value="Welcome to JavaServer Face!"
17        style="font-family: Arial, sans-serif; font-size: 24;
18        color: green;"/>
19     <p>
20      <h:message id="errors" for="helloInput" style="color: red"/>
21     <p>
22     <p>
23      <h:outputLabel for="helloInput">
24       <h:outputText id="helloInputLabel"
25          value="Enter number of controls to display:"/>
26      h:outputLabel>
27      <h:inputText id="helloInput" value="#{helloBean.numControls}"
28                    required="true">
29         <f:validateLongRange minimum="1" maximum="500"/>
30       h:inputText>
31     <p>
32     <p>
33      <h:panelGrid id="controlPanel"
34                  binding="#{helloBean.controlPanel}"
35                  columns="20" border="1" cellspacing="0"/>
36     <p>
37     <h:commandButton id="redispalyCommand" type="submit"
38                     value="Redisplay"
39                     actionListener="#{helloBean.addControls}"/>
40     <h:commandButton id="goodbyeCommand" type="submit" value="Goodbye"
41                     action="#{helloBean.goodbye}" immediate="true"/>
42     </h:form>
43   </body>
44  </html>
45</f:view>

里面的taglib的功能我就不介绍了,自己看sun公司的文档,免得翻译不好,误人子弟啊!
接着新建一个goodbye.jsp文件,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 1<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 3<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
 4
 5<f:view>
 6 <html>
 7  <head>
 8   <title>
 9    JFC - hello world!
10   </title>
11  </head>
12  <body>
13   <h:form id="goodbyeForm">
14    <p>
15     <h:outputText id="welcomeOutput" value="Goodbye!"
16                        style="font-family: Arial, sans-serif; font-size: 24;
17                        font-style: bold; color: green;"/>
18    <p>
19    <p>
20     <h:outputText id="helloBeanOutputLabel"
21                  value="Number of controls displayed: "/>
22      <h:outputText id="helloBeanOutPut"
23                   value="#{helloBean.numControls}"/>
24    <p>
25   </h:form>
26  </body>
27 </html>
28</f:view>

现在配置web.xml文件和config文件
web.xml文件的代码如下:
 1<?xml version="1.0" encoding="UTF-8"?>
 2
 3<!DOCTYPE web-app PUBLIC
 4  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 5  "http://java.sun.com/dtd/web-app_2_3.dtd">
 6
 7<web-app>
 8
 9    <context-param>
10        <param-name>javax.faces.CONFIG_FILESparam-name>
11        <param-value>
12            /WEB-INF/examples-config.xml
13        param-value>
14        <description>
15            Comma separated list of URIs of (additional) faces config files.
16            (e.g. /WEB-INF/my-config.xml)
17            See JSF 1.0 PRD2, 10.3.2
18        description>
19    context-param>
20
21
22    
23    <servlet>
24        <servlet-name>Faces Servletservlet-name>
25        <servlet-class>javax.faces.webapp.FacesServletservlet-class>
26        <load-on-startup>1load-on-startup>
27    servlet>
28
29    <servlet-mapping>
30        <servlet-name>Faces Servletservlet-name>
31        <url-pattern>*.jsfurl-pattern>
32    servlet-mapping>
33
34    
35    <welcome-file-list>
36        <welcome-file>index.jspwelcome-file>
37    welcome-file-list>
38    
39    
40    <jsp-config>
41    <taglib>
42      <taglib-uri>http://java.sun.com/jsf/coretaglib-uri>
43      <taglib-location>/WEB-INF/lib/jsf_core.tldtaglib-location>
44    taglib>
45    <taglib>
46      <taglib-uri>http://java.sun.com/jsf/htmltaglib-uri>
47      <taglib-location>/WEB-INF/lib/html_basic.tldtaglib-location>
48    taglib>
49   jsp-config>
50web-app>

由于我用的是空模板,所以对于config文件我没改名,examples-config.xml
的代码如下:
 1xml version="1.0" encoding="UTF-8"?>
 2DOCTYPE faces-config PUBLIC
 3  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
 4  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd" >
 5
 6<faces-config>
 7 
 8 
 9 <managed-bean>
10  <managed-bean-name>helloBeanmanaged-bean-name>
11  <managed-bean-class>com.gem.hello.HelloBeanmanaged-bean-class>
12  <managed-bean-scope>sessionmanaged-bean-scope>
13 managed-bean>
14 
15 
16 <navigation-rule>
17  <from-view-id>/hello.jspfrom-view-id>
18  <navigation-case>
19   <from-outcome>successfrom-outcome>
20   <to-view-id>/goodbye.jspto-view-id>
21  navigation-case>
22 navigation-rule>
23 faces-config>
 
还有就是记得把jstl.jar文件放在lib目录下,要不然会报错。如果机子上没有,就去sun的网站上下,或者下一个spring,里面就有这个文件。
好了,现在在浏览器里面输入
http://127.0.0.1:8080/hello/hello.jsf,就可以了。注意,是hello.jsf,不是hello.jsp哦!
posted on 2005-08-27 19:41 MudFish 阅读(464) 评论(1)  编辑  收藏 所属分类: JSP

只有注册用户登录后才能发表评论。


网站导航: