【问题标题】:primefaces, lazy loading datatable and jsf @conversation scope beanprimefaces、延迟加载数据表和 jsf @conversation 范围 bean
【发布时间】:2012-04-02 19:33:16
【问题描述】:

我在 jboss 6.1 中使用 primefaces 3.2 和 mojarra 2.1.7。我正在尝试构建一个延迟加载数据表。在其中一个数据表列中,我有一个命令链接来调用编辑方法。如果我的 bean 是对话范围的,则不会调用 edit 方法。如果它是视图范围的,那么它会被调用。我不能让会话范围的 bean 与延迟加载数据表一起工作?

@Named("userBean")
@Stateful
@ConversationScoped
@LoggedIn
public class UserBean implements Serializable, UserBeanLocal {

   private static final long serialVersionUID = 1L;

   @Inject
   private Conversation conversation;
   @EJB
   private UserManagerBeanLocal userController;
   @Inject
   private transient FacesContext context;

   private User user;

   private LazyUserDataModel lazyModel;

   public UserBean() {
      user = new User();
   }

   @Override
   @PostConstruct
   public void createLazyDataModel() {
      setLazyModel(new LazyUserDataModel(userController));
   }

   @Override
   @PrePassivate
   public void ejbPassivate(){
      context = null;
   }

   @Override
   @PostActivate
   public void ejbActivate() {
   }

   @Override
   public String create() {
      this.conversation.begin();
      return "create";
   }


   @Override
   public String edit()
   {
      System.out.println("editing user");
      return "create";
   }

}

和

<h:form>
....
<p:dataTable id="userTable" var="usr" value="#{userBean.lazyModel}"
            paginator="true"
            paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowsPerPageTemplate="5,10,15" paginatorPosition="bottom" rows="10"
            currentPageReportTemplate="{currentPage} de {totalPages}">
            <p:column headerText="Username">
               <h:outputText value="#{usr.name}" />
            </p:column>
            <p:column>
               <p:commandLink value="Edit" action="#{userBean.edit}" actionListener="#{userBean.update}" update="userTable" />
            </p:column>

         </p:dataTable>
</h:form>

有人可以帮忙吗?

谢谢

凯莉

【问题讨论】:

    标签: primefaces cdi


    【解决方案1】:

    嗯,它当然应该工作。您的代码没有明显错误,但我怀疑您提供的 sn-p 有一些“尝试和错误”历史......;-)

    尝试调试对话并查看解决了哪个对话(以及何时)。您是否正确传播了对话 ID?

    当您编写 ViewScoped 作品时 - 您是否包含了用于将 JSF 范围连接到 CDI 的 Seam 3,或者您是否正在混合 JSF 和 CDI 范围?

    并且:不要在构造函数中放置任何 EJB 代码,因为您无法保证何时(以及多久)调用它。最好改用@PostConstruct。

    【讨论】:

      【解决方案2】:

      我的问题是我没有正确传播对话 ID。

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 2014-12-19
        • 2015-04-18
        • 2013-01-09
        • 2016-11-02
        • 2013-06-17
        • 2013-05-26
        • 2012-09-25
        • 2011-02-22
        相关资源
        最近更新 更多