primefaces:在commandlink中更新之前执行操作

时间:2013-10-25 13:46:42

标签: jsf primefaces

我有一个Dialog和一个显示此对话框的CommandLink。在此对话框中,i显示在命令链接的操作(或propertyListener)期间创建的值。但由于更新是在操作之前执行的,因此未设置变量。

<p:commandLink update="@form:myDialog" action="#{myBean.setText('text')}"
oncomplete="myDialog.show()">
</p:commandLink>
....
<p:dialog widgetVar="myDialog"  modal="true">
      <p:inputText value="#{myBean.text}" />
</p:dialog>

是否可以在更新完成之前执行操作?

2 个答案:

答案 0 :(得分:1)

我会在对话框中更新你没有指定对话框的Id属性

<p:commandLink update="myDialog" action="#{myBean.setText('text')}"
     oncomplete="myDialog.show()">
</p:commandLink>

<p:dialog Id="myDialog" widgetVar="myDialog"  modal="true">
    <p:inputText value="#{myBean.text}" />
</p:dialog>

这会对你有帮助。

但我更喜欢的是使用输出面板

<p:commandLink update="myDialogPanel " actionlistner="#{myBean.setText('text')}"
     oncomplete="myDialog.show()">
</p:commandLink>

<p:dialog Id="myDialog" widgetVar="myDialog"  modal="true">
   <p:outputPanel Id=myDialogPanel >
    <p:inputText value="#{myBean.text}" />
   </p:outputPanel>
</p:dialog>

或者您可以从managedBean更新对话框并显示对话框。如果在您的对话框未显示的managedBean方法中出现任何错误,这将非常有用。

RequestContext.getCurrentInstance().update("myDialogPanel");
RequestContext.getCurrentInstance().execute("myDialog.show();");

答案 1 :(得分:1)

您可以从ManagedBean本身打开Dialog。

RequestContext.getCurrentInstance().execute(myDialog.show());

RequestContext可用于执行ManagedBean中的任何javascript 您还可以使用RequestContextUpdate从托管Bean更新组件 方法。

 RequestContext.getCurrentInstance().update("COMPONENT_ID");