在一些AJAX请求之后重新创建了ViewScoped CDI bean

时间:2014-09-26 16:51:07

标签: ajax jsf jsf-2.2 view-scope uirepeat

我有一个CDI ViewScoped bean和一个JSF页面。在几个AJAX请求之后,bean以某种方式重新创建。 以下是该应用程序的完整代码:

的index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        <h:form>
            <h:inputText value="#{questionBean.newTag}"></h:inputText>
            <h:commandButton value="Add Tag">
                <f:ajax listener="#{questionBean.addTag()}" execute="@form" render="@form"></f:ajax>
            </h:commandButton>
            <ui:repeat value="#{questionBean.tagsOfQuestion}" var="tag">
                <h:outputLabel value="#{tag}"></h:outputLabel>
                <h:commandButton value="X">
                    <f:ajax event="click" listener="#{questionBean.removeTag(tag)}" render="@form" execute="@form"/>
                </h:commandButton>
            </ui:repeat>
        </h:form>
    </h:body>
</html>

这是支持CDI bean QuestionBean.java

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import javax.faces.view.ViewScoped;
    import javax.inject.Named;

    @Named
    @ViewScoped    
    public class QuestionBean {
        private String newTag;
        private List<String> tagsOfQuestion = new ArrayList<String>();
        private Date dateCreated = new Date();

    public QuestionBean(){
        System.out.println("Date Created : "+dateCreated);
    }

    public void addTag(){
        if(!newTag.isEmpty()){
            getTagsOfQuestion().add(newTag);
        }
        newTag = "";
    }

    public void removeTag(String tagToRemove){
        getTagsOfQuestion().remove(tagToRemove);
    }

    public String getNewTag() {
        return newTag;
    }

    public void setNewTag(String newTag) {
        this.newTag = newTag;
    }

    public List<String> getTagsOfQuestion() {
        return tagsOfQuestion;
    }

    public void setTagsOfQuestion(List<String> tagsOfQuestion) {
        this.tagsOfQuestion = tagsOfQuestion;
    }

}

1 个答案:

答案 0 :(得分:2)

当我尝试它时,我遇到了同样的问题 - Netbeans 8和JSF 2.2.0。

在我更新Glassfish之后为我工作 - 从here抓取javax.faces.jar - 我拿了最新的2.2.8-02,并替换了glassfish / glassfish / modules中的那个。

不知道错误是什么,或者确切地说它是什么时候。

希望它也适合你。