1

だから私はこの問題を見つけました、それは本当に奇妙です..

だから私はこの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(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;
        }
    }
}

ここでの目的は、ユーザーがタブを閉じたり、新しいリクエストを行ったりしてもデータが保持されるように、セッションスコープへのユーザー入力を保存することです。

上記のコードは機能しますが、入力ボックスのajaxイベントを削除すると、それに気づきました。

何か案は?

ありがとう

4

1 に答える 1

4

ajaxイベントにより、変更がサーバーに送信され、セッションで保持されます。あなたがそれらを持っていないならば、あなたはそれをするために何か他のものを必要とするでしょう。古典的には、通常の投稿を行います(フォームの送信ボタンならどれでもかまいません)。ただし、ユーザーはボタンをクリックして変更を明示的に保存する必要があります。

ユーザーが実際に遊んでタブを閉じることが目標であり、ユーザーが戻ってきたときにすべてがそのままの状態である場合は、とにかくajaxイベントが必要になります。

于 2012-08-20T13:29:04.727 に答える