我有一个由 primefaces 数据表支持的 CRUD 表单。每次创建新实体时,都会更新表。但问题是创建只工作一次,同一视图中的后续请求不会触发支持 bean 操作。经过仔细检查,我发现唯一的区别是后续请求缺少javax.faces.ViewStatePOST 数据中的属性,我认为最终会创建一个全新的 bean。
这是 JSF 2.2 的默认设置吗?
这是视图:
<h:form id="create">
    <p:outputLabel value="label" for="inp"/>
    <p:inputText id="inp" value="#{newJSFManagedBean.newEntity.foo}"/>
    <p:commandButton action="#{newJSFManagedBean.create()}" 
                     update="@form, :table" value="Create"/>
</h:form>
<br />
<p:dataTable value="#{newJSFManagedBean.entities}" var="entity"
             id="table">
    <p:column headerText="foo">#{entity.foo}</p:column>
</p:dataTable>
豆子:
@Named
@javax.faces.view.ViewScoped
public class NewJSFManagedBean implements Serializable {
    private NewEntity newEntity;
    @EJB
    private NewEntityFacade entityFacade;
    private Collection<NewEntity> entities;
    @PostConstruct
    private void init() {
        newEntity = new NewEntity();
        entities = entityFacade.findAll();
    }
    // ...
}
EJB 也是:
@Stateless
public class NewEntityFacade {
    @PersistenceContext
    private EntityManager em;
    // ...
}