0

我有一个由 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;

    // ...

}
4

1 回答 1

0

显然,此行为是 glassfish 4 的问题。当update属性包含表单 ID 时会发生这种情况。一种解决方法是更新内部容器而不是整个表单。

更多信息:http: //forum.primefaces.org/viewtopic.php?f= 3&t=31280

于 2013-06-24T23:44:28.207 回答