Jsf 为什么即使在服务器重新启动后,我的应用程序的值仍然保留?
我的小应用程序中有2个Jsf 为什么即使在服务器重新启动后,我的应用程序的值仍然保留?,jsf,tomcat,Jsf,Tomcat,我的小应用程序中有2个@SessionScopedbean。即使在重新启动clean服务器时,所有表单值都会保留 @ManagedBean(name = "bill") @SessionScoped public class Bill implements Serializable { /** * */ private static final long serialVersionUID = 1L; private static final Stri
@SessionScoped
bean。即使在重新启动clean服务器时,所有表单值都会保留
@ManagedBean(name = "bill")
@SessionScoped
public class Bill implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final String MANAGED_BEAN_NAME = "bill";
/**
* @return the current instance of Bill
*/
public static Bill getCurrentInstance() {
return (Bill) FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get(MANAGED_BEAN_NAME);
}
//other methods
}
@ManagedBean
@SessionScoped
public class TailorTip implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Bill bill;
private Participants[] participants;
private Integer participantIndex;
@PostConstruct
public void init() {
bill = Bill.getCurrentInstance();
}
//other methods
}
如何避免保留价值观?注意:我使用tomcat。如果它们是会话作用域,那么许多服务器会在重新启动时保留会话信息。如果重新部署应用程序,则信息将被清除。但是简单地重新启动应用程序不会重置它。您必须查阅服务器文档才能在服务器重启时禁用会话持久性。如果它们是会话范围,那么许多服务器会在重启时保留会话信息。如果重新部署应用程序,则信息将被清除。但是简单地重新启动应用程序不会重置它。您必须查阅服务器文档,才能在服务器重新启动时禁用会话持久性。这确实是意料之中的事。许多服务器在重新启动时保存和恢复会话,以便最终用户可以继续其网站会话。这是通过Java序列化实现的。这也是会话范围的bean需要实现
Serializable
的原因
至于解决方案,有几种方法可以解决此问题:
Serializable
接口声明。这样,在服务器重新启动时,它们将无法恢复context.xml
向
元素添加路径名为空的
元素
<Context ... >
<Manager pathname="" />
</Context>
- 这确实是完全可以预料到的。许多服务器在重新启动时保存和恢复会话,以便最终用户可以继续其网站会话。这是通过Java序列化实现的。这也是会话范围的bean需要实现
Serializable
的原因
至于解决方案,有几种方法可以解决此问题:
Serializable
接口声明。这样,在服务器重新启动时,它们将无法恢复context.xml
向
元素添加路径名为空的
元素
<Context ... >
<Manager pathname="" />
</Context>