2011-12-16 4 views
1

У меня есть приложение SEAM 2, и у меня странная ситуация. Я развиваюсь с помощью Eclipse Indigo, и мне нужно создать страницу с сеткой, в которой каждая строка имеет кнопку, которая отображает всплывающее окно со списком, и вы можете выбрать один элемент списка со ссылкой и выбранное значение показано в строке.не может вызывать методы из компонента SEAM

Так у меня есть этот компонент:

@Name("paramContHome") 
@Scope(ScopeType.CONVERSATION) 
public class ParamContHome extends KubeDAO<ParametroSistema>{ 

    private static final long serialVersionUID = 1L; 

    @In 
    private LoginUser loginUser; 

    @In(required=false,create=true) 
    private CuentaContHome cuentaContHome; 

    public void load(){ 
     try{ 
      setInstance(getEntityManager().find(ParametroSistema.class, prctId)); 
     }catch (Exception e) { 
      clearInstance(); 
      setInstance(new ParametroSistema()); 
     } 
    } 

    public void selCuentaParam(ParametroSistema par) { 
     setSelParam(par); 
     cuentaContHome.getCuentasList(); 
    } 

    public void setCuentaParam(CuentaContable cta) { 
     selParam.setValorNum(cta.getId().floatValue()); 
     selParam.setSelObj(cta); 
    } 

    ... 

    } 

, который содержит методы, которые я пытаюсь позвонить из Xhtml страницы. Это страница XHTML:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:s="http://jboss.com/products/seam/taglib" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:a="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich" 
    xmlns:p="http://primefaces.prime.com.tr/ui" 
    template="/layout/templateKu.xhtml"> 
    <ui:define name="body"> 
     <rich:panel> 
      <f:facet name="header">#{app.paramact_head}</f:facet> 
      <rich:spacer height="20" /> 
      <h:form id="formA"> 
       <p:growl globalOnly="true" sticky="false" life="3000" /> 
       <p:focus /> 
       <a:queue name="q1" /> 

       <rich:dataTable var="res" value="#{paramContHome.resultList}" 
        rendered="#{not empty paramContHome.resultList}" rows="10" 
        align="center" rowClasses="tableInfo1 tableInfo2" 
        headerClass="tablaHeader" footerClass="tableScroll"> 
        <f:facet name="header">#{app.paramact_list}</f:facet> 

        <rich:column filterBy="#{res.nombre}" filterEvent="onkeyup"> 
         <f:facet name="header">#{app.paramact_nombre}</f:facet> 
         <h:outputText value="#{res.nombre}" /> 
        </rich:column> 
        <rich:column> 
         <f:facet name="header">#{app.transferencia_valornum}</f:facet> 
         <h:inputText value="#{res.selObj.nombre}" size="20" > 
          <a:support event="onblur" ajaxSingle="true" eventsQueue="q1" reRender="_table"/> 
         </h:inputText> 
         <a:commandButton ajaxSingle="true" 
          action="#{paramContHome.selCuentaParam(res)}" reRender="sCta" 
          onclick="#{rich:component('selCta')}.show();" 
          styleClass="modifyBtn" value=" " style="width:30px;"> 
         </a:commandButton> 
        </rich:column> 
        <f:facet name="footer"> 
         <rich:datascroller id="ds1" renderIfSinglePage="true" /> 
        </f:facet> 
       </rich:dataTable> 
      </h:form> 
     </rich:panel> 
     <rich:modalPanel id="selCta" width="400" moveable="false" autosized="true" top="50px" 
      onbeforeshow="activeModal.setActiveModalPanel('selCta');"> 
      <f:facet name="header">#{app.general_lov}</f:facet> 
      <f:facet name="controls"> 
       <h:panelGroup> 
        <h:graphicImage value="/kubeImg/close.png" styleClass="closeBtn" 
         onclick="#{rich:component('selCta')}.hide();" /> 
       </h:panelGroup> 
      </f:facet> 
      <s:div id="sCta"><ui:include src="selCta.xhtml" /></s:div> 
     </rich:modalPanel> 
    </ui:define> 
</ui:composition> 

Это кнопка, где я хочу вызвать метод selCuentaParam компонента paramContHome:

<rich:column> 
    <f:facet name="header">#{app.transferencia_valornum}</f:facet> 
    <h:inputText value="#{res.selObj.nombre}" size="20" > 
     <a:support event="onblur" ajaxSingle="true" eventsQueue="q1" reRender="_table"/> 
    </h:inputText> 
    <a:commandButton ajaxSingle="true" 
     action="#{paramContHome.selCuentaParam(res)}" reRender="sCta" 
     onclick="#{rich:component('selCta')}.show();" 
     styleClass="modifyBtn" value=" " style="width:30px;"> 
    </a:commandButton> 
</rich:column> 

Внутри этого метода я вызвать метод из другого компонента, cuentaContHome:

@In(required=false,create=true) 
private CuentaContHome cuentaContHome; 
... 
public void selCuentaParam(ParametroSistema par) { 
setSelParam(par); 
cuentaContHome.getCuentasList(); 
} 

Но когда я запускаю приложение и вхожу на страницу, и я нажимаю кнопку, он не вызывает метод selCuentaParam. Я проверил это, потому что я поставил в него контрольные точки и поместил System.out.println и не вызывал его. Вы знаете, почему это происходит, что-то связано с инициализацией компонента?

С уважением.

+0

Это не проблема инициализации компонента (в противном случае вы получите NullPointerExceptions). Что происходит, когда вы нажимаете кнопку? отображается любая страница с ошибкой или что-то в консоли? –

+0

Нет, ничего не происходит. На выходе я получаю следующее: '19: 53: 39,911 WARN [Component] Невозможно создать компонент шва, область действия не активна: entityManager (CONVERSATION)' Но это нормально, и я получаю это на других экранах или каталогах приложение, и у меня нет проблем. –

+0

Вы пытались включить режим отладки Seam [http://community.jboss.org/message/523017)? и как насчет журналов сервера приложений? Трудно понять, что происходит без дополнительной информации. Пожалуйста, разместите здесь дополнительную информацию об отладке, которую вы можете придумать. –

ответ

1

Ну, я нашел проблему, я думаю. На моих экранах я следую определенному шаблону: Сначала у меня есть xhtml, где я показываю сетку записей базы данных с кнопкой, чтобы перейти ко второму xhtml, у которого есть форма для создания новой записи. Эта кнопка начинает разговор, поэтому в xhtml, который имеет форму (я называю его detail.xhtml), он начинает разговор или присоединяется к существующему. Таким образом, я изменил pages.xml первого (я XHTML называют его List.xhtml) в следующем виде:

<?xml version="1.0" encoding="UTF-8"?> 
<page xmlns="http://jboss.com/products/seam/pages" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd"> 
<action execute="#{paramContHome.getParametrosContables()}" on-postback="false"/> 

     <begin-conversation propagation="begin" join="true" /> 

</page> 

я использовал первый только <begin-conversation /> и но это дает мне это исключение begin() called from long-running conversation, try join=true поэтому я добавил это начать-разговор, и он работает !!

Смежные вопросы