gpt4 book ai didi

ajax - p :dialog does not fire ajax close event when using dialog. 隐藏()

转载 作者:行者123 更新时间:2023-12-03 16:55:31 25 4
gpt4 key购买 nike

我正在使用 <p:dialog> .提交其中的表格后,我使用 dialog.hide()并触发 ajax 关闭事件监听器方法,该方法将更新 List<E> .
它工作正常,但是当我放置一些必需的输入组件并带上 <p:dialog> 时再次,如果有一些验证错误,它不会再触发该方法。

对话框:

<p:outputPanel autoUpdate="true">
<p:dialog id="dialogComentario" header="Deixe sua avaliação" widgetVar="confirmation"
showEffect="fade" hideEffect="fade" height="340" width="500" modal="true"
visible="#{not empty facesContext.maximumSeverity}"
resizable="false" closable="true" draggable="false">
<h:form prependId="false">
...
<p:commandLink styleClass="btn btn-primary btenviacoment"
oncomplete="if (!args.validationFailed) confirmation.hide();"
actionListener="#{comentario.actEnviarComentario}" global="false">
<i class=" icon-play-circle icon-white"></i>
<h:outputText value=" Enviar Comentário" />
<f:param name="codigoplu" value="#{produto.produto.codigoplu}" />
</p:commandLink>
...
<p:commandLink styleClass="btn" onclick="confirmation.hide();"
global="false" immediate="true">
<h:outputText value=" Cancelar" />
<i class="icon-off"></i>
</p:commandLink>
...
</h:form>
<p:ajax event="close" update=":avaliacoesClientes, :dialogComment"
listener="#{produto.atualizarComentarios}" global="false" />
</p:dialog>
</p:outputPanel>

Action 监听器方法:
public void actEnviarComentario(ActionEvent event) {
String codigoplu = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("codigoplu");
PegarDadosCliente();

try {
DateFormat f = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date utildata = new java.util.Date();
utildata = (java.util.Date) f.parse(String.valueOf(data.getValue()));
java.sql.Date datasql = new java.sql.Date(utildata.getTime());

Comentario comentario = new Comentario(Integer.parseInt(usuario.getId()), Integer.parseInt(codigoplu), titulo.getValue().toString(), mensagem.getValue().toString(), datasql, Integer.parseInt(rating.getValue().toString()), new java.sql.Date(new Date().getTime()));
listavelComentarios.inserirComentario(comentario);

RequestContext.getCurrentInstance().execute("confirmation.hide();");
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}

我试图用 RequestContext 关闭对话框如 action 方法所示,但这也不会触发 ajax close 事件。

这是ajax关闭事件监听器方法:
public void atualizarComentarios(CloseEvent event) {

try {
comentarios = comentario.listarComentarios(codigoplu);

if (comentarios.size() > 0) {
msgAvaliacao = "Avaliação do produto.";
int votos = 0;

for (Comentario comentario : comentarios) {
votos += comentario.getAvaliacao();
}

rating = votos / comentarios.size();
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

最佳答案

此问题与验证无关。删除所有这些输入组件并按下命令按钮/链接,您会看到它仍未被触发。

此问题是由 <p:outputPanel autoUpdate="true"> 的不必要组合引起的和 visible="#{not empty facesContext.maximumSeverity}" .输出面板不断自动更新对话框,这显然迫使您设置 visible这样的属性。该对话框在 oncomplete 之前自动更新事件被触发。如果对话框visible属性是 false ,则对话框在 oncomplete 之前已经隐藏(不可见)被解雇。

所以,只要去掉 <p:outputPanel>visible属性。您的 oncomplete已经做了正确的工作。

无关 到具体问题,RequestContext线是不必要的。您已经将其隐藏在 oncomplete 中这很好。另见 Keep p:dialog open when a validation error occurs after submit .

关于ajax - p :dialog does not fire ajax close event when using dialog. 隐藏(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com