簡體   English   中英

JSF會話作用域

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM