我正在使用<p:dialog>
。在提交表單後,我使用dialog.hide()
,它觸發ajax關閉事件偵聽器方法,該方法將更新List<E>
。 它工作正常,但是當我放入一些必需的輸入組件並在出現一些驗證錯誤時再次帶上<p:dialog>
時,它再也不會觸發該方法。p:使用dialog.hide時,dialog不會觸發ajax關閉事件()
對話框:
<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>
的動作監聽器方法:
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
對話框,如圖中的操作方法,但不會觸發Ajax關閉事件無論是。
這裏的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:dialog'標籤嗎? – partlov
對不起,我錯過了。更新。 –
是否需要以* Ajax *的方式執行?我提出這個問題是因爲我看到你以某種方式使你的代碼複雜化。我認爲使用'h:commandLink'與'action'方法和'ajax =「false」'相比更容易。這將提交,你可以刷新你想要的內容,一旦回到對話框將不會顯示。 –