[英]JSF Session scoped
所以我發現了這個問題,這真的很奇怪..
所以我有這個xhtml頁面:
<h:form>
<rich:dataTable value="#{carsBean.myList}" var="car">
<rich:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:inputText value="#{car.name}">
<p:ajax event="keyup" listener="#{carsBean.print}" />
</h:inputText>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Company" />
</f:facet>
<h:inputText value="#{car.company}">
<p:ajax event="keyup" listener="#{carsBean.print}" />
</h:inputText>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Address" />
</f:facet>
<h:inputText value="#{car.address}">
<p:ajax event="keyup" listener="#{carsBean.print}" />
</h:inputText>
</rich:column>
</rich:dataTable>
<h:commandButton value="save-empty">
</h:commandButton>
</h:form>
以下是managedbean:
@ManagedBean(name="carsBean")
@SessionScoped
public class CarsBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7818770780064447805L;
private List<Car> myList;
private String test;
public CarsBean(){}
public void print(){
System.out.println("I got hit!");
}
/**
* @return the myList
*/
@PostConstruct
void initialiseSession() {
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().getSession(true);
if(myList==null){
myList = new ArrayList<Car>();
};
if(myList.isEmpty()){
for(int a=0;a<10;a++){
myList.add(new Car("test","test","test"));
}
}
}
public List<Car> getMyList() {
return myList;
}
/**
* @param myList the myList to set
*/
public void setMyList(List<Car> myList) {
this.myList = myList;
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
public static class Car{
private String name;
private String company;
private String address;
public Car(){}
public Car(String name, String company, String address) {
super();
this.name = name;
this.company = company;
this.address = address;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the company
*/
public String getCompany() {
return company;
}
/**
* @param company the company to set
*/
public void setCompany(String company) {
this.company = company;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}
}
}
現在的目的是在sessioncope中保存用戶輸入,這樣即使用戶關閉選項卡或發出新請求,數據也會保持不變。
上面的代碼是有效的,但我注意到,當我刪除輸入框上的ajax事件時,它是非常的。
有任何想法嗎?
謝謝
ajax事件導致您的更改被發送到服務器,並持久存儲在會話中。 如果你沒有它們,你將需要其他東西來做它。 通常情況下,你會做一個普通的帖子(你的表單上的任何提交按鈕都會這樣做)。 但是,您的用戶必須單擊按鈕才能明確保存其更改。
如果你的目標真的是你的用戶可以玩,關閉他們的標簽,當他們回來時一切都是他們離開它,你仍然需要ajax事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.