当前位置: 代码迷 >> JavaScript >> Spring+JSF示范
  详细解决方案

Spring+JSF示范

热度:557   发布时间:2012-10-23 12:12:22.0
Spring+JSF示例

JSF 本身提供了强大的 Bean 管理功能。但 Spring 作为一种轻量的容器,在管理 Bean方面有着不可替代的优势,使用起来很方便 。在 Spring 流行的今天,怎么能少了在 JSF 中整合 Spring 呢?下面的示例比较简单,但也能清楚的表达如何将 JSF+Spring 两者互相整合起来。

整个示例,通过输入页面输入特定的字符串,在后面查找此字符串对应的数值,然后展现给客户,如果没有找到则提示错误。



一、??????
页面

?

1.输入页面: stockInput.jsp

<% @page?contentType = " text/html " %>
<% @page?pageEncoding = " UTF-8 " %>

<% @taglib?prefix = " f " ?uri = " http://java.sun.com/jsf/core " %>
<% @taglib?prefix = " h " ?uri = " http://java.sun.com/jsf/html " %>

< f:view >
????
< html >
????????
< head >
????????????
< title > 字符输入页面 </ title >
????????
</ head >
????????
< body >
????????????
< h:form?id = " stockForm " >

????????????????
< h1 >
????????????????????请输入一个字符串,如ABC或DEF或GHI或JKL
????????????????
</ h1 >

????????????????
< p >
????????????????????
< h:inputText?id = " stockSymbolInput " ?value = " #{stockBean.symbolName} "
????????????????????????required
= " true " >
????????????????????
</ h:inputText >
????????????????
</ p >

????????????????
< h:commandButton?id = " stockSubmit " ?type = " submit " ?value = " 提交 "
????????????????????action
= " #{stockBean.findStockValue} " >
????????????????
</ h:commandButton >

????????????
</ h:form >

????????
</ body >
????
</ html >
</ f:view >


?

2.输出页面:stockOutputFailure.jsp

<% @page?contentType = " text/html " %>
<% @page?pageEncoding = " UTF-8 " %>

<% @taglib?prefix = " f " ?uri = " http://java.sun.com/jsf/core " %>
<% @taglib?prefix = " h " ?uri = " http://java.sun.com/jsf/html " %>

<! DOCTYPE?HTML?PUBLIC? " -//W3C//DTD?HTML?4.01?Transitional//EN "
" http://www.w3.org/TR/html4/loose.dtd " >

< html >
????
< head >
????????
< meta?http - equiv = " Content-Type " ?content = " text/html;?charset=UTF-8 " >
????????
< title > 取得字符串所对应的值 </ title >
????
</ head >
????
< body >

????????
< f:view >
????????????
< h1 >
????????????????所输入的字符串
????????????????
< h:outputText?value = " #{stockBean.symbolName} " >
????????????????
</ h:outputText >
????????????????对应的值是
????????????????
< h:outputText?value = " #{stockBean.symbolValue} " >
????????????????
</ h:outputText >
????????????
</ h1 >
????????
</ f:view >

????
</ body >
</ html >

?

3 .错误处理页面: stockOutputFailure.jsp

<% @page?contentType = " text/html " %>
<% @page?pageEncoding = " UTF-8 " %>

<% @taglib?prefix = " f " ?uri = " http://java.sun.com/jsf/core " %>
<% @taglib?prefix = " h " ?uri = " http://java.sun.com/jsf/html " %>

<! DOCTYPE?HTML?PUBLIC? " -//W3C//DTD?HTML?4.01?Transitional//EN "
" http://www.w3.org/TR/html4/loose.dtd " >

< html >
????
< head >
????????
< meta?http - equiv = " Content-Type " ?content = " text/html;?charset=UTF-8 " >
????????
< title > 错误页面 </ title >
????
</ head >
????
< body >

????????
< f:view >
????????????
< h1 >
????????????????所查找的字符串
????????????????
< h:outputText?value = " #{stockBean.symbolName} " >
????????????????
</ h:outputText >
????????????????不存在,请再次查找
!
????????????
</ h1 >
????????
</ f:view >

????
</ body >
</ html >

?

?

二、?????? 后台处理 Bean

? StockValueFetcher.java

package ?com.sterning.springjsf;

import ?java.util. * ;

public ? class ?StockValueFetcher? {

????
private ?Map < String,?String > ?stockSymbolsAndValues;

????
private ?String?symbolName;
????
private ?String?symbolValue;

????
public ?StockValueFetcher()? {
????????stockSymbolsAndValues?
= ? new ?HashMap < String,?String > ();
????????stockSymbolsAndValues.put(
" ABC " ,? " 10 " );
????????stockSymbolsAndValues.put(
" DEF " ,? " 20 " );
????????stockSymbolsAndValues.put(
" GHI " ,? " 30 " );
????????stockSymbolsAndValues.put(
" JKL " ,? " 40 " );
????}


????
public ?String?getSymbolName()? {
????????
return ?symbolName;
????}


????
public ? void ?setSymbolName(String?symbolName)? {
????????
this .symbolName? = ?symbolName;
????}


????
public ?String?getSymbolValue()? {
????????
return ?symbolValue;
????}


????
public ? void ?setSymbolValue(String?symbolValue)? {
????????
this .symbolValue? = ?symbolValue;
????}


????
public ?String?findStockValue() {
????????
boolean ?symbolFound? = ?stockSymbolsAndValues.containsKey(symbolName);
????????
if ?(symbolFound) {
????????????symbolValue?
= ?stockSymbolsAndValues.get(symbolName);
????????????
return ? " stockOutputSuccess " ;
????????}
else {
????????????
return ? " stockOutputFailure " ;
????????}

????}

}


????

三、?????? 配置文件

1 WEB-INF/faces-config.xml

<? xml?version='1.0'?encoding='UTF-8' ?>

< faces-config? version ="1.2" ?
xmlns
="http://java.sun.com/xml/ns/javaee" ?
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" ?
xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee?
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
>

< application >
????
< variable-resolver >
????????org.springframework.web.jsf.DelegatingVariableResolver
????
</ variable-resolver >
</ application >

<!-- ??下面的代码在没有使用Spring时起一样的作用
<managed-bean>
????<managed-bean-name>stockBean</managed-bean-name>
????????<managed-bean-class>
????????????com.sterning.springjsf.StockValueFetcher
????????</managed-bean-class>
????<managed-bean-scope>request</managed-bean-scope>????
</managed-bean>
-->
< navigation-rule >
????
< description > Navigation?from?the?hello?page. </ description >
????
< from-view-id > /stockInput.jsp </ from-view-id >
????
< navigation-case >
????????
< from-outcome > stockOutputSuccess </ from-outcome >
????????
< to-view-id > /stockOutputSuccess.jsp </ to-view-id >
????
</ navigation-case >
????
< navigation-case >
????????
< from-outcome > stockOutputFailure </ from-outcome >
????????
< to-view-id > /stockOutputFailure.jsp </ to-view-id >
????
</ navigation-case > ????
</ navigation-rule >

</ faces-config > ?

?

?

注意我使用中文注释的地方。

?

2 WEB-INF/applicationContext.xml

<? xml?version="1.0"?encoding="UTF-8" ?>
<! DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>

< beans >

< bean? id ="stockBean"
class
="com.sterning.springjsf.StockValueFetcher" >
</ bean >
?

? 3 WEB-INF/web.xml

<? xml?version="1.0"?encoding="UTF-8" ?>
< web-app? version ="2.5" ?xmlns ="http://java.sun.com/xml/ns/javaee"
????xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee?
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>

????
< listener >
????????
< listener-class >
????????????org.springframework.web.context.ContextLoaderListener
????????
</ listener-class >
????
</ listener >

????
< context-param >
????????
< param-name > contextConfigLocation </ param-name >
????????
< param-value > /WEB-INF/applicationContext.xml </ param-value >
????
</ context-param >

????
< servlet >
????????
< servlet-name > Faces?Servlet </ servlet-name >
????????
< servlet-class > javax.faces.webapp.FacesServlet </ servlet-class >
????????
< load-on-startup > 1 </ load-on-startup >
????
</ servlet >

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

????
< session-config >
????????
< session-timeout > 30 </ session-timeout >
????
</ session-config >

????
< welcome-file-list >
????????
< welcome-file > faces/stockInput.jsp </ welcome-file >
????
</ welcome-file-list >
</ web-app >

?


?

参考文献: http://www.javabeat.net/articles/2007/10/integrating-spring-and-jsf/

  相关解决方案