Earth's profileLet's go insideBlogListsNetwork Tools Help

Blog


    JSF - first intimate contact

    以前一直习惯用JBuilder,开始慢慢习惯Eclipse,寻找热键是我爱做的事:
    Ctrl+J 代码自动提示(用的最多,习惯了JBuilder的热键设置方式)
    Shift + Ctrl + F 格式化(其次多)
    Ctrl + Alt + Z窗口最大化
    Shift + Enter 在当前行下插入一行,光标移至下一行开始
    Ctrl + D: 删除当前行
    Ctrl + ↓复制当前行/段落 
    Alt+↓ 当前行和下面一行交互位置
    F3或Ctrl + Click: 查找类定义
    Ctrl + Shift + G 寻找所有该东东出现的地方
    Ctrl + K相当于JB中的F3
    Ctrl + F查找/替换
    目前就用这几个,慢慢熟悉
     
    新建Web Project,名为HelloJSF,设置工程编码为UTF-8
     
    MyEclipse-> add JSF capability,在弹出的对话框内选择:
    Sun JSF Reference Implementation 1.1.01
    /WEB-INF/config/faces-config.xml
    Faces Servlet
    *.jsf ,
    Finish ->可以看见MyEclipse自动导入了我们所需的jar包,如下:
    commons-beanutils,commons-collections,commons-digester,commons-logging(非必需),
    jsf-api,jsf-impl,jstl,standard
    而且自动生成了如下web.xml
      <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/config/faces-config.xml</param-value>
      </context-param>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
      </servlet-mapping>
     
    环境搭建好后,接下来要添加实际的内容了:
    Step1:建一个POJO:  onlyfan.caterpillar.UserBean,其中有一个name属性及相应的s-getter
    Step2:双击faces-config.xml, 在它的Design视图中,我们直接建立两个JSP,
    index.jsp和welcome.jsp并Add a navigation case
    建JSP参数如下:/HelloJSF/web/pages, index.jsp, [6] Default JSF Template
    建Navigation case如下:
    在from Outcome中填login,切换到Source视图,可以看到自动生成了如下代码:
    <faces-config >
     <navigation-rule>
      <from-view-id>/pages/index.jsp</from-view-id>
      <navigation-case>
       <from-outcome>login</from-outcome>
       <to-view-id>/pages/welcome.jsp</to-view-id>
      </navigation-case>
     </navigation-rule>
    </faces-config>
    我们在其中加上如下一段
     <managed-bean>
      <managed-bean-name>user</managed-bean-name>
      <managed-bean-class>onlyfan.caterpillar.UserBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
     </managed-bean>
     
    修改index.jsp内容如下:
      <f:view>
       <h:form>
     InputName:
     <h:inputText value="#{user.name}"></h:inputText>
        <p>
         <h:commandButton value="send" action="login"></h:commandButton>
       </h:form>
      </f:view>
    修改welcome.jsp内容如下:
     <f:view>
      Hello!<h:outputText value="#{user.name}"></h:outputText>
     </f:view>
    发布,并启动Tomcat5,在web browser中输入http://localhost:8080/HelloJSF/pages/index.jsp页面报错如下:
    javax.servlet.ServletException: Cannot find FacesContext
    在google上搜索原因如下:

    In the web.xml you specify how your faces are called. For example as *.faces

       <servlet-mapping>
          <servlet-name>Faces Servlet</servlet-name>
          <url-pattern>*.faces</url-pattern>
       </servlet-mapping>

    When you want to call an index.jsp in the webRoot you have to call it as shown in the example below:

    http://localhost:8080/LearningJSF/index.faces