2017-07-08 1 views
5

プライムフェイステーブルの編集フォームを作成したいとします。私が編集フォームを開いて、私は、フォームが消えEdit System Userボタンをクリックするとプライムフェイステーブルの編集フォームを作成

@Named 
@RequestScoped 
public class Systemusers implements Serializable 
{ 
....... 
public void editRecord(boolean editable) 
    { 
     SessionFactory factory = HibernateUtils.getSessionFactory(); 
     Session session = factory.getCurrentSession(); 

     try 
     { 
      session.getTransaction().begin(); 

      SystemUsersModel obj = new SystemUsersModel(); 
      obj.setId(selectedSystemUser.getId()); 
      .......... 
      session.update(obj); 

      session.getTransaction().commit(); 

      this.editable = editable; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      session.getTransaction().rollback(); 
     } 
    } 
...... 
private boolean editable = false; 

    public boolean isEditable() 
    { 
     return editable; 
    } 

    public void setEditable(boolean editable) 
    { 
     this.editable = editable; 
    } 
} 

:Beanを管理

<h:form id="form"> 
    <p:dataTable id="tbl" var="systemuser" value="#{systemusers.systemUsers}"         
       selectionMode="single" selection="#{systemusers.selectedSystemUser}" rowKey="#{systemuser.username}" lazy="true" 
       resizableColumns="true" 
       > 

     <p:ajax event="rowSelect" listener="#{systemusers.onRowSelect}" update=":form:carDetail" oncomplete="PF('carDialog').show()" /> 
     .................... 
    </p:dataTable> 

    <p:dialog id="wd" header="System User Details" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="true"> 
     <p:outputPanel id="carDetail" style="text-align:center;"> 
      <p:panelGrid columns="2" columnClasses="label,value"> 

       <h:outputLabel for="id" value="ID" /> 
       <p:outputLabel id="id" value="#{systemusers.selectedSystemUser.id}" rendered="#{not systemusers.editable}"/> 
       <h:inputText value="#{systemusers.selectedSystemUser.id}" rendered="#{systemusers.editable}" /> 
       ........ 
      </p:panelGrid> 
     </p:outputPanel> 

     <f:facet name="footer"> 
      <p:commandButton value="Edit System User" rendered="#{not systemusers.editable}" 
          actionListener="#{systemusers.editRecord(false)}"> 
       <f:ajax render=":form:wd" execute=":form:wd"></f:ajax> 
      </p:commandButton>&nbsp; 

      <p:commandButton value="Cancel" rendered="#{systemusers.editable}" actionListener="#{systemusers.editRecord(true)}"> 
       <f:ajax render=":form" execute=":form"></f:ajax> 
      </p:commandButton> 
     </f:facet> 
    </p:dialog> 

    <p:contextMenu for="tbl"> 
     <p:menuitem value="View" update="carDetail" icon="fa fa-search" oncomplete="PF('carDialog').show()"/> 
     <p:menuitem value="Delete" update="tbl" icon="fa fa-remove" actionListener="#{systemusers.deleteSystemUser}"> 
      <p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-warning" /> 
     </p:menuitem> 
    </p:contextMenu> 

    <p:confirmDialog global="true" showEffect="fade" hideEffect="fade"> 
     <p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="fa fa-check" /> 
     <p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="fa fa-remove" /> 
    </p:confirmDialog> 
</h:form> 

:私はこのコードをテストしました。おそらく私はそれをレンダリングして実行するからです。どのように私はフォームを実行することができ、それを閉じることなくそれを閉じることができますか?

+0

私はこの同じ結果が得られます。いくつかのコード例を貼り付けることはできますか? –

+0

私はあなたの提案を試みましたが、再びダイアログが隠されています。私はダイアログにフォームを追加しましたが、私は今問題を解決することができました。現在、私はこの問題に直面しています:Java Object value = "#{systemusers.selectedSystemUser.id}"が空で、編集ボタンを押します。どのように私はこれを修正することができますどのような考え? –

+0

ここで簡単な注意点は、ダイアログボックス用の専用のh:フォームとテーブル用の専用フォームを用意し、p:dialogのコンテンツ**を新しいh:フォームで囲み、旧式のh:formを使用すると、実行や処理の問題を修正する可能性があります。 –

答えて

1

例のコードは複数の点で悪いです。二つのものが目立つ:

  • をそれは[MCVE]
  • <f:ajax render=":form" execute=":form">ないOPが最も可能性が高いPrimeFaces showcaseから(引用、ということを知らない余分であるかさえ奇妙な行動を引き起こす可能性があります

強調鉱山)

コマンドボタン

CommandButtonは、標準的なh:commandButton をajax、部分処理およびスキニング機能で拡張しています。

のでcommandBottonはすでにAJAX anabledあるとは内部

<f:ajax render=":form" execute=":form"> 

をHAVAするを必要としません。これにより(おそらく)アップデートが2回実行されます。 1つの@none(Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes)と1つはフォームを更新します。 2番目のものは、コンテンツを持っていない可能性が最も高いです。しかし、試してみると(そしてデバッグすると)分かりやすくなります。これが答えではない場合、その理由はコード内には見当たらないので、[mcve]

関連する問題