在 <p:confirmDialog> 中显示之前更新 bean 消息值
Update bean message value before displaying it in a <p:confirmDialog>
谁能告诉我如何更改 <p: confirm>
的消息?当您单击按钮时,我希望 messageCount ()
方法返回值消息。
...
<p:outputLabel value="Test:" />
<p:inputText value="#{testController.fieldTest}" id="fieldTest"/>
...
<p:commandButton value="Ok" action="#{testController.cadTest()}">
<p:confirm id="messageConfirm" header="Test" />
</p:commandButton>
...
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
<f:facet name="message">
<p:outputPanel>
<h:outputFormat id="message" value="#{testController.mensagemConfirm}" escape="false"/>
</p:outputPanel>
</f:facet>
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
...
//TestController
private String mensagemConfirm;
private Integer count = 0;
public Integer messageCount() {
return count++;
}
public String getMensagemConfirm() {
setMessageConfirm("Count: " + messageCount());
return mensagemConfirm;
}
public void setMensagemConfirm(String mensagemConfirm) {
this.mensagemConfirm = mensagemConfirm;
}
示例:
首先点击"Ok" (<p:commandButton>
)
-> confirmDialog的消息:计数:1(点击"No")
第二次单击 "Ok" (<p:commandButton>
)
-> confirmDialog的消息:计数:2(点击"No")
第三次单击"Ok" (<p:commandButton>
)
-> confirmDialog的消息:计数:3(点击"No")
根据您的解释,您似乎只想在用户点击 "No"
后增加 count
值
因此,您可以在 commandButton 中使用 actionListener
属性,它将使用 ajax 请求调用增量方法:
<p:commandButton value="No" actionListener="#{testController.incrementCount()}" ajax="true" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
- 请注意,我删除了 属性
type=button
,如果我不这样做,它就不会调用该方法
显示当前值:
<h:outputFormat id="message" value="Count: #{testController.count}" escape="false"/>
控制器:
Integer count = 0;
public void incrementCount() {
count++;
}
public Integer getCount(){
return count;
}
这里的问题是 p:confirm 将不会执行您的服务器端代码,直到您在 confirmDialog 中按下 "yes"。所以你必须先执行服务器端代码,然后在 ajax 请求完成后显示确认对话框。
您可以通过显示带有 oncomplete 属性的确认对话框来完成:
<p:commandButton value="Ok" update="conf" action="#{testController.increaseCount()}" oncomplete="PF('confirmVar').show()"/>
<p:confirmDialog id="conf" global="true" showEffect="fade" hideEffect="fade" widgetVar="confirmVar">
<p:commandButton value="Yes" action="#{testController.cadTest()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmVar').hide()"/>
<p:commandButton value="No" styleClass="ui-confirmdialog-no" icon="ui-icon-close" oncomplete="PF('confirmVar').hide()"/>
<f:facet name="message">
<p:outputPanel>
<h:outputFormat value="Count: #{testController.count}" escape="false"/>
</p:outputPanel>
</f:facet>
</p:confirmDialog>
在纯 getters/setters 中执行应用程序逻辑代码的设计也很糟糕。为此使用专用方法。
测试控制器 bean:
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public void increaseCount() {
count++;
}
谁能告诉我如何更改 <p: confirm>
的消息?当您单击按钮时,我希望 messageCount ()
方法返回值消息。
...
<p:outputLabel value="Test:" />
<p:inputText value="#{testController.fieldTest}" id="fieldTest"/>
...
<p:commandButton value="Ok" action="#{testController.cadTest()}">
<p:confirm id="messageConfirm" header="Test" />
</p:commandButton>
...
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
<f:facet name="message">
<p:outputPanel>
<h:outputFormat id="message" value="#{testController.mensagemConfirm}" escape="false"/>
</p:outputPanel>
</f:facet>
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
...
//TestController
private String mensagemConfirm;
private Integer count = 0;
public Integer messageCount() {
return count++;
}
public String getMensagemConfirm() {
setMessageConfirm("Count: " + messageCount());
return mensagemConfirm;
}
public void setMensagemConfirm(String mensagemConfirm) {
this.mensagemConfirm = mensagemConfirm;
}
示例:
首先点击"Ok" (
<p:commandButton>
)-> confirmDialog的消息:计数:1(点击"No")
第二次单击 "Ok" (
<p:commandButton>
)-> confirmDialog的消息:计数:2(点击"No")
第三次单击"Ok" (
<p:commandButton>
)-> confirmDialog的消息:计数:3(点击"No")
根据您的解释,您似乎只想在用户点击 "No"
后增加count
值
因此,您可以在 commandButton 中使用 actionListener
属性,它将使用 ajax 请求调用增量方法:
<p:commandButton value="No" actionListener="#{testController.incrementCount()}" ajax="true" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
- 请注意,我删除了 属性
type=button
,如果我不这样做,它就不会调用该方法
显示当前值:
<h:outputFormat id="message" value="Count: #{testController.count}" escape="false"/>
控制器:
Integer count = 0;
public void incrementCount() {
count++;
}
public Integer getCount(){
return count;
}
这里的问题是 p:confirm 将不会执行您的服务器端代码,直到您在 confirmDialog 中按下 "yes"。所以你必须先执行服务器端代码,然后在 ajax 请求完成后显示确认对话框。
您可以通过显示带有 oncomplete 属性的确认对话框来完成:
<p:commandButton value="Ok" update="conf" action="#{testController.increaseCount()}" oncomplete="PF('confirmVar').show()"/>
<p:confirmDialog id="conf" global="true" showEffect="fade" hideEffect="fade" widgetVar="confirmVar">
<p:commandButton value="Yes" action="#{testController.cadTest()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmVar').hide()"/>
<p:commandButton value="No" styleClass="ui-confirmdialog-no" icon="ui-icon-close" oncomplete="PF('confirmVar').hide()"/>
<f:facet name="message">
<p:outputPanel>
<h:outputFormat value="Count: #{testController.count}" escape="false"/>
</p:outputPanel>
</f:facet>
</p:confirmDialog>
在纯 getters/setters 中执行应用程序逻辑代码的设计也很糟糕。为此使用专用方法。
测试控制器 bean:
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public void increaseCount() {
count++;
}