Google App Engine + JSF 2示例

在本教程中,我们将向您展示如何在Google App Engine(GAE)环境中开发和部署JSF 2.0 Web应用程序。

使用的工具和技术:

  1. JDK 1.6
  2. Eclipse 3.7 + Eclipse的Google插件
  3. Google App Engine Java SDK 1.6.3.1
  4. JSF 2.1.7

注意
该示例将重用此JSF 2.0 hello世界示例 ,对其进行修改并将其与该GAE + Java示例合并。

1.新的Web应用程序项目

在Eclipse中,创建一个新的Web应用程序项目,名为“ JSFGoogleAppEngine ”。

generate a new web application GAE project

“ Google Eclipse插件”将生成GAE项目结构的示例。

2. JSF 2依赖关系

要在GAE中使用JSF 2,您需要以下jar

  1. jsf-api-2.1.7.jar
  2. jsf-impl-2.1.7.jar
  3. el-ri-1.0.jar

复制并将其放在“ war / WEB-INF / lib ”文件夹中。

gae jsf2 dependency libraries

右键单击项目文件夹,选择“ 属性 ”。 选择“ Java Build Path ”->“ Libraries ”选项卡,单击“ Add Jars ”按钮,然后选择上方的jars。

gae jsf2 java build path

注意
您需要放置此el-ri-1.0.jar ,否则,您将看到错误消息– 无法实例化ExpressionFactory'com.sun.el.E​​xpressionFactoryImpl'

3. JSF托管bean

3.1删除插件生成的JSFGoogleAppEngineServlet.java ,您不需要这样做。

3.2创建一个托管bean。

文件:src / com / mkyong / HelloBean.java

package com.mkyong;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import java.io.Serializable;

@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

3.3创建一个新的WebConfiguration.java。

JSF 2正在使用GAE不支持的“ javax.naming.InitialContext ”。

为了解决这个问题,您需要获取JSF的源代码副本,克隆WebConfiguration.java ,使用“ javax.naming.InitialContext ”类的注释方法,并将其放在“ src / com / sun / faces / comfig / WebConfiguration.java ”。 现在,新创建的WebConfiguration.java类将重载原始的WebConfiguration.java

注意
获取WebConfiguration.java的完整源代码

我认为GAE团队不会将此罐列入白名单,只是希望JSF的团队可以在将来的版本中解决此问题。

4. JSF页面

4.1创建hello.xhtml页面,接受用户输入并将其传递给helloBean。

文件:war / hello.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<h:head>
	<title>GAE + JSF</title>
</h:head>
<h:body>
	<h1>Google App Engine + JSF 2.0 example - hello.xhtml</h1>
	<h:form>
		<h:inputText value="#{helloBean.name}"></h:inputText>
		<h:commandButton value="Welcome Me" action="welcome"></h:commandButton>
	</h:form>
</h:body>
</html>

4.2创建welcome.xhtml页面,显示来自hellobean的用户输入。

档案:war / welcome.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<h:head>
	<title>GAE + JSF</title>
</h:head>
<h:body bgcolor="white">
	<h1>Google App Engine + JSF 2.0 example - welcome.xhtml</h1>
	<h2>Welcome #{helloBean.name}</h2>
</h:body>
</html>

4.3删除插件生成的index.html文件,您不需要此文件。

5. web.xml

更新web.xml,集成JSF 2。

档案:web.xml

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

	<display-name>JavaServerFaces</display-name>

	<!-- GAE 1.6.3 cannot handle server side (JSF default) state management. -->
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>


	<!-- Change to "Production" when you are ready to deploy -->
	<context-param>
		<param-name>javax.faces.PROJECT_STAGE</param-name>
		<param-value>Development</param-value>
	</context-param>

	<!-- Welcome page -->
	<welcome-file-list>
		<welcome-file>faces/hello.xhtml</welcome-file>
	</welcome-file-list>

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

	<!-- Map these files with JSF -->
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>

</web-app>

注意
GAE不支持服务器端状态管理,因此,您需要将“ javax.faces.STATE_SAVING_METHOD ”定义为“ client ”,以避免在GAE生产环境中出现“ 无法还原View /hello.xhtml ”错误消息。

6.在GAE中启用会话

更新appengine-web.xml ,启用会话支持,JSF需要此。

文件:appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application></application>
  <version>1</version>

	<sessions-enabled>true</sessions-enabled>

</appengine-web-app>

7.目录结构

查看最终目录结构。

final directory structure

8.在本地运行

右键单击该项目,以“ Web应用程序”运行。

网址:http:// localhost:8888 / hello.jsf

local output

点击按钮。

local output

10.在GAE上部署

更新appengine-web.xml文件,添加您的App Engine应用程序ID。

文件:appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>mkyong-jsf2gae</application>
  <version>1</version>

	<sessions-enabled>true</sessions-enabled>

</appengine-web-app>

选择项目,然后单击Google图标“ Deploy to App Engine ”。

deploy on GAE

网址:http://mkyong-jsf2gae.appspot.com/hello.jsf

gae production output

下载源代码

由于文件较大,因此不包括所有JSF和GAE jar。

下载– JSF2-GoogleAppEngine-Example.zip (42 KB)

参考文献

  1. JSF和GAE兼容的问题
  2. Google App上的JSF 2配置
  3. 带有JSF 2 + CDI的Google App Engine
  4. Google App和JSF入门
  5. JSF 2.0 Hello World示例
  6. Oracle:JavaServer Faces开发教程

翻译自: https://mkyong.com/google-app-engine/google-app-engine-jsf-2-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值