我想在集群环境中测试 JSF 2 的会话和应用程序范围 bean 的会话复制,目前正在尝试使用 glassfish。为此,我创建了一个简单的应用程序,我首先将其部署到服务器以验证它是否正常工作(它没有)。
这是我到目前为止所做的:
- 在 Oracle VirtualBox 中设置 Ubuntu 虚拟机
- 将 glassfish 下载为 zip 文件并将其解压缩到主目录中
- 开始玻璃鱼
- 将 JSF 应用程序部署为战争文件
- 进入应用页面:localhost:8080/jsftest/index.jsf
- 尝试设置保存在会话/应用程序范围内的变量
根据 web.xml 中的 javax.faces.STATE_SAVING_METHOD 结果:
- 服务器:抛出 viewExpiredException
- 客户端:不存储值并显示默认值
要创建应用程序,我执行了以下操作:
- 在 Eclipse 中创建新的动态 Web 项目
- 解压 WEB-INF/lib 中 myfaces 核心的所有文件
- 将类文件夹设置为 WEB-INF/classes
- 编写 bean 和 .xhtml 如下
会话范围的 bean(应用范围的类似):
@ManagedBean(name = "sessbean")
@SessionScoped
public class MySessionScopeBean implements Serializable{
private static final long serialVersionUID = -4733271400646173098L;
private String value = "default session data";
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
index.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>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
<h:outputText value="Session id: #{sessionScope['id']}" />
<h:form>
<h:panelGroup>
<h:outputText value="Session Variable:"/>
<br/>
<h:inputText value="#{sessbean.value}"/>
</h:panelGroup>
<h:commandButton value="submit"/>
</h:form>
<h:form>
<h:panelGroup>
<h:outputText value="Application Variable:"/>
<br/>
<h:inputText value="#{appbean.value}"/>
</h:panelGroup>
<h:commandButton value="submit"/>
</h:form>
</h:body>
</html>
所以这个非常基本的例子不起作用。有什么建议么?
#{sessionScope['id']} 也没有显示 Session-ID,不知道这是否是这样做的方法。