2016-06-22 3 views
0

私はdataTable(RichFaces 4.5.1、MyFaces 2.2.6、Spring 3.1.1、Tomcat 7.0.27)からModalPanelを作成しようとしていますが、できません。RichFacesを使用したModalPanel

modalPanelには、テーブル内の選択された行に基づいて表示される値があります。 commandLinkをクリックすると、actionListenerがこれらの値(localidadeMB.carregarColecoes())をフィードするはずですが、beanの属性への参照がnull(commandLinkにあるf:setPropertyActionListenerによって設定されていないため)は機能しません。

何が欠けていますか?

* page.xhtml

(...) 
<f:view> 
<h:form id="formConsulta"> 
    <rich:dataTable id="tabela" 
     value="#{localidadeMB.getLocalidadesPorPalavra()}" var="loc" 
     rowKeyVar="row" rows="20" width="800px" render="scroller"> 
     <rich:column> 
      (...) 
     </rich:column> 
     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value=""/> 
      </f:facet> 
      <a4j:commandLink id="editlink" ajaxSingle="true" 
       oncomplete="#rich:component('modalEditarLocalidade')}.show()" 
       actionListener="#{localidadeMB.carregarColecoes}" 
       render="modalEditarLocalidade"> 
      <h:graphicImage value="/img/edit.png"/> 
      <f:setPropertyActionListener value="#{loc}" target="#{localidadeMB.localidade}" /> 
      </a4j:commandLink> 
     </rich:column> 
    </rich:dataTable> 
</h:form> 

<ui:include src="modalPanel.xhtml" /> 

* modalPanel.xhtml

<ui:composition> 
<rich:popupPanel id="modalEditarLocalidade" autosized="true" 
    modal="false" resizable="false"> 
    <f:facet name="header"> 
     <h:outputText value="Alterar localidade" /> 
    </f:facet> 
    <f:facet name="controls"> 
     <h:graphicImage id="modalClosePNG2" value="/img/close1.png" 
      style="cursor:default;" 
      onclick="Richfaces.hideModalPanel('modalEditarLocalidade')" /> 
    </f:facet> 
    <h:form> 
     <h:outputLabel value="Nome da localidade:" for="nomeLocalidade" /> 
     <h:inputText id="nomeLocalidade" 
      value="#{localidadeMB.localidade.nome}" required="true" 
      immediate="true"/> 
     </h:inputText> 
    </h:form> 
</rich:popupPanel> 
</ui:composition> 

* ManagedBean

private Localidade localidade; 

public void setLocalidade(Localidade l){ 
    this.localidade = l; 
} 

public void carregarColecoes(ActionEvent action){ 
    System.out.println(localidade.getNome()); 

     ***** print NULL ***** 
} 

答えて

0

マキエルとthis linkの提案で私は決めました。ご意見、Makhielため

public String carregarColecoes(){ 
     (....) 
    } 
1

あなたは最初の変数を設定して、方法、あなたを実行する場合そのメソッドに対して@actionを使用する必要があります。最初にactionListenersが実行されますが、両方のメソッドがactionListenersであるため、0変数が設定される前にが実行されます。 (そしてbtw。h:commandLinkには "ajaxSingle"や "oncomplete"属性はありません)

+0

ありがとう:このような

<a4j:commandLink id="editlink" ajaxSingle="true" oncomplete="#{rich:component('modalEditarLocalidade')}.show()" action="#{localidadeMB.carregarColecoes}" render="modalEditarLocalidade"> <h:graphicImage value="/img/edit.png"/> <f:setPropertyActionListener value="#{loc}" target="#{localidadeMB.localidade}" /> </a4j:commandLink> 

とManagedBean:

XHTMLはこのように見えました。申し訳ありませんが、ajaxSingleは、私がa4j:commandLinkをテストしていたので、間違ったコードをコピーしているためです。私は更新しました。 –

+0

あなたは@Actionの使い方をよりよく説明できますか?どのメソッドを使用するか:setLocalidade()またはcarregarColecoes()?挿入しようとすると、Eclipseはjavax.xml.ws.Actionをインポートしようとしました。これは正しくない?私は何をするべきですか? –

+0

"@action"は、Javaアノテーションではなく、 "actionという名前の属性"を意味します。 ;) – Makhiel

関連する問題