простые лица, отложенная загрузка данных и bean-объект jsf @conversation - PullRequest
2 голосов
/ 02 апреля 2012

Я использую простые лица 3.2 и mojarra 2.1.7 с jboss 6.1.Я пытаюсь построить отложенную загрузку данных.В одном из столбцов данных есть командная ссылка для вызова метода редактирования.Если мой 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>

Кто-нибудь может помочь?

Спасибо

Kelly

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Ну, это конечно должно работать. Очевидно, в вашем коде нет ничего плохого, но я подозреваю, что из предоставленного вами фрагмента у вас есть какая-то история "попыток и ошибок" ...; -)

Попробуйте отладить беседу и посмотреть, к какому разговору обращаются (и когда). Правильно ли вы передаете идентификатор разговора?

Когда вы пишете ViewScoped works - вы включили Seam 3 для соединения JSF-областей с CDI, или же вы смешиваете области JSF и CDI?

И: не помещайте никакой EJB-код в конструктор, так как у вас нет никакой гарантии, когда (и как часто) это будет вызываться. Вместо этого лучше использовать @PostConstruct.

1 голос
/ 04 апреля 2012

Моя проблема заключалась в том, что я не правильно передавал идентификатор разговора.

...