PrimeFacesコンポーネントをJavaScriptから更新して、強制的に更新することは可能ですか?
ダイアログでこのボタンを使用して、ajax保存呼び出しを行っています。 oncompleteイベントにカスタムjavascriptを添付しました。
<p:growl life="1500" id="showmessage"/>
<p:dialog id="addMemberDialog" widgetVar="addMemberDlg">
<!-- More Code -->
<p:commandButton value="Save"
actionListener="#{memberManagedBean.save}"
oncomplete="handleSaveNewMember(xhr, status, args)"
update=":memberListForm:membersTable createupdateform "
process="@form" />
</p:dialog>
..保存ボタン中に、growlコンポーネントを使用してクライアントに表示するメッセージをここに追加しています。
public void save(ActionEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Successfuly Add user", "Successfuly Add user");
FacesContext.getCurrentInstance().addMessage(null, message);
}
私の問題は、うなり声コンポーネントがメッセージを表示する前に最初にダイアログを非表示にする必要があるように、UIをどのように順序付けることができますか?
function handleSaveNewMember(xhr, status, args) {
addMemberDlg.hide();
//update the growl after the dialog was hidden?
}
何が起こっているのかといえば、うなり声コンポーネントがダイアログの横に同時に表示されています。
ありがとう。
これにはPrimeFacesの <p:remoteCommand>
を使用できます。
<p:remoteCommand name="updateGrowl" update="showmessage" />
として呼び出される
<p:commandButton ... oncomplete="addMemberDlg.hide(); updateGrowl();" />
ただし、この特定のケースでは、より簡単な方法があります。 <p:growl>
のautoUpdate
属性をtrue
に設定します。
<p:growl autoUpdate="true" life="1500" id="showmessage"/>
すべてのajaxリクエストで自動更新されます。コンポーネントが実際にそれをサポートしていなかった場合、その属性をサポートする<p:outputPanel>
で常にラップすることができます。
<p:outputPanel autoUpdate="true">
...
</p:outputPanel>
いつでもこのようなことができます(保存ボタンの更新属性からshowmessage IDを削除します)
<h:commandButton style="display:none" id="myBtn" >
<f:ajax render=":showmessage"/>
</h:commandButton>
function handleSaveNewMember(xhr, status, args) {
...
jQuery("#myBtn").click();
}
[〜#〜] edit [〜#〜]しかし、あなたの現在のコードでは、とにかくgrwolの更新と同時にダイアログが閉じられていませんか?
私のアドバイス:
actionListener
属性で_<p:remoteCommand>
_を使用します。この属性は、次のように_FacesContext.addMessage
_コードを含むバッキングBeanメソッドを呼び出します。<p:remoteCommand actionListener="myBean.testMethod()" />
handleSaveNewMember
スクリプトで、addMemberDlg.hide();
の後にremoteCommand
name
属性を呼び出します(<p:remoteCommand name="testScript" actionListener="myBean.testMethod()"/>
)。次に、function handleSaveNewMember(xhr, status, args) { addMemberDlg.hide(); testScript(); }
update
属性をremoteCommand
ポインティンググロールコンポーネントに追加:<p:remoteCommand name="testScript" actionListener="myBean.testMethod()" update="showmessage" />
commandButton
は問題ありません。これは私のために働いた。
ご挨拶。
<h:panelGroup>内にp:Dialogを配置できないのはなぜですか。のような
< h:panelGroup id="addUser" rendered = "boolean value " >
< p:dialog id="addMemberDialog" widgetVar="addMemberDlg" >
<!-- More Code -->
< p:commandButton value="Save" actionListener="#{memberManagedBean.createOrUpdate}"
oncomplete="handleSaveNewMember(xhr, status, args)"
update=":memberListForm:membersTable createupdateform :showmessage :addUser"
process="@form" />
< /p:dialog >
< /h:panelGroup>
saveメソッドで設定する必要のあるブール値。 saveメソッドでこれをfalseに設定すると、更新中に表示されません。そのため、うなり声メッセージだけが表示されます。ただし、このsaveメソッドを呼び出す前に、このブール値はtrueに設定されます。
P:remotecommandというPrimeFaces要素を使用できます。この要素は、アクションを実行して(たとえば、Beanメソッドを呼び出す)、そのアクションの後に更新を実行します。
この投稿には例があります http://devdublog.blogspot.com/2015/04/best-way-for-calling-method-of.html 。