2013-01-17 10 views
5

<p:dialog><p:commandButton>を組み合わせて使用​​しようとしています。私の.xhtmlページには、ダイアログを表示するためのpicklistとcommandButtonがあります。ダイアログボックスには、picklistからのターゲット値でデータ可能なものが表示されます。ダイアログにはキャンセルと送信の2つのボタンがあります。私の問題は、送信ボタンが押されないということです。奇妙なのは、ダイアログボックスのcommandButtonが機能することです。私はボタンを作業し、1を動作していないマークしたPrimefacesダイアログ+ commandButton

<body> 
    <ui:composition template="./../resources/mainTemplate.xhtml"> 
     <ui:define name="content"> 
      <h:form> 
       <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
        <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
         <h:column> 
          #{skillslevel.skill.umiejetnosc} 
         </h:column> 
         <h:column> 
          <p:selectOneMenu value="#{skillslevel.level}" > 
           <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
          </p:selectOneMenu> 
         </h:column> 
        </h:dataTable> 
        <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
        <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
       </p:dialog> 
       <p:pickList value="#{editSkills.skills}" var="skill" effect="none" 
       itemValue="#{skill.id}" itemLabel="#{skill.umiejetnosc}" 
       showSourceFilter="true" showTargetFilter="true" filterMatchMode="contains" 
       addLabel="#{messages.add}" removeLabel="#{messages.remove}" removeAllLabel="#{messages.removeAll}" > 
        <f:facet name="sourceCaption">#{messages.skillsList}</f:facet> 
        <f:facet name="targetCaption">#{messages.yourSkills}</f:facet> 
        <p:ajax event="transfer" listener="#{editSkills.onTransfer}" /> 
        <p:column style="width:100%;"> 
         #{skill.umiejetnosc} 
        </p:column> 
       </p:pickList> 
       <p:commandButton value="#{messages.confirm}" action="#{editSkills.afterSubmit}" update="dlg" oncomplete="dlg.show()" /> THIS BUTTON WORKS FINE 
       <p:commandButton value="#{messages.cancel}" action="profile" immediate="true"/> 
      </h:form> 
     </ui:define> 
    </ui:composition> 
</body> 

は、ここに私の.xhtmlです。 動作させるには何が必要ですか?あなたは、次のいずれかを試すことができ

+0

コンソールを見ましたか?ajaxコールをしていないのですか?またはそれは単に働いていないのですか?サーバーへのデータ送信、またはAJAXの起動で、 '#{editSkills.showSkillsAndLevels} 'メソッドがまったく呼び出されていない場合は、ファイアバグを調べてみてください。また、firebugがJSエラーを表示していないかどうかを確認します。 – Mindwin

+0

@Mindwinそれはまったく呼び出されていないようです。 JSエラーも見られません。 – AjMeen

答えて

17

、私はナンバーワンに投票、それはきれいなデザインIMO

  1. 一般<h:form/><p:dialog/>外を持参し、それが代わりに内

    <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
         <h:form> 
          <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
           <h:column> 
            #{skillslevel.skill.umiejetnosc} 
           </h:column> 
           <h:column> 
            <p:selectOneMenu value="#{skillslevel.level}" > 
             <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
            </p:selectOneMenu> 
           </h:column> 
          </h:dataTable> 
          <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
          <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
          </h:form> 
         </p:dialog> 
    
    <h:form/>を入れます
  2. <p:dialog/>appendToBody="false"を追加して、ダイアログがDOMインのhtml形式でレンダリングされるようにしますHTML本文の末尾に自動再配置されてしまいます。しかし、これは、さまざまなブラウザで一貫性のないレンダリングを引き起こす可能性があります。

+0

あなたの答えをありがとう! あなたの言うことをやったことがありましたが、今このエラーが発生しています: '/user/editSkills.xhtml @ 39,121 itemValue ="#{skill.id} ":クラス 'java.lang.String' 'id'というプロパティはありません。奇妙なのはピックリストと関連していると思います。私は何をすべきか? – AjMeen

+0

@AjMeen、それはおそらく '#{skill.id}'と '#{skillslevel.level} 'が同じデータ型ではないという事実によって引き起こされた、別の問題です(そのうちの1つは文字列、もう1つは何かelse)。しかし今、あなたのcommandButtonは確実に発砲しています。 – kolossus

+0

'#{skilllevel.level}'はこのエラーとは関係がありません。なぜなら、エラーがまだ現れている 'skilsslevel'部分を削除してもそれが原因です。私はおそらくおそらくコンバータが必要です。とにかく助けてくれてありがとう! – AjMeen

4
<p:commandButton value="Cancel" oncomplete="PF('yourDialogWidgedVarName').hide();" process="@this" /> 

uはwidgetVar名を呼び出すとき"を使用してください。また、immediate = "true"またはprocess = "@ this"を使用することもできます。

+0

immediate = "true"またはprocess = "@ this"は必要ありません。 しかし、あなたの答えには必要な情報が素早く入っていました。ありがとう! – Eric

関連する問題