单击CommandLink后未填充Primefaces对话框字段
我将Primefaces 3.5与Weblogic 11配合使用。我有一个页面,其中有一个对话框,用于编辑从两个位置调用的“profile”实体(“perfil”)。首先从commandButton插入新的配置文件。从数据表中选择第二个来编辑特定概要文件。下面,我将显示代码: XHTML页面的片段 我有什么问题?显然,当我想插入一个新的配置文件时,一切似乎都正常。但是,当我单击编辑现有配置文件以打开对话框时,尽管单击CommandLink后未填充Primefaces对话框字段,primefaces,dialog,Primefaces,Dialog,我将Primefaces 3.5与Weblogic 11配合使用。我有一个页面,其中有一个对话框,用于编辑从两个位置调用的“profile”实体(“perfil”)。首先从commandButton插入新的配置文件。从数据表中选择第二个来编辑特定概要文件。下面,我将显示代码: XHTML页面的片段 我有什么问题?显然,当我想插入一个新的配置文件时,一切似乎都正常。但是,当我单击编辑现有配置文件以打开对话框时,尽管输出文本和选取列表已正确填充,但输入文本和选择菜单未正确填充 在寻找解决方案时,我
输出文本
和选取列表
已正确填充,但输入文本
和选择菜单
未正确填充
在寻找解决方案时,我发现了一个建议,建议在对话框中使用appendToBody=“true”
。当我尝试时,inputText
和selectOneMenu
已正确填充。但是,验证没有按预期进行。当我单击保存时,会显示一条消息,指示选择列表未填充,即使它确实已填充。实际上,即使没有填写inputText
,也没有关于这些inputText
的消息,尽管它们是必需的
另一种选择是在命令链接中使用
:
<!-- OPEN DIALOG TO CREATE A NEW PROFILE -->
<p:commandButton id="btnIncluir" value="Incluir"
update="dlgPerfil" immediate="true"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao}"
oncomplete="dlgPerfil.show();">
<f:setPropertyActionListener target="#{perfilAcessoMB.perfil}" value="#{null}"/>
</p:commandButton>
<!-- OPEN DIALOG TO EDIT A NEW PROFILE -->
<p:commandLink id="lnkEditar" immediate="true"
title="Editar Perfil" update=":formPrincipal:dlgPerfil :formPrincipal:pnlPerfilEdicao"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao}"
oncomplete="dlgPerfil.show();">
<f:setPropertyActionListener target="#{perfilAcessoMB.perfil}" value="#{perfil}"/>
<h:outputText value="Editar" />
</p:commandLink>
现在,当我单击创建一个新的perfil时,尽管在actionListener方法中perfil属性已填充,但在渲染对话框时,我得到了一个NullPointerException。这就像打开对话框后,第一个被称为perfilAcessoMB.setPerfil()
,最后是actionListener方法。另一方面,如果我单击以编辑一个现有的概要文件,我将返回到初始情况
因此,我迷路了,不知道如何解决这个问题
谢谢
拉斐尔·阿方索(Rafael Afonso)解决方案非常简单:只是在两个命令按钮中添加了process=“@this”
<!-- OPEN DIALOG TO EDIT A NEW PROFILE -->
<p:commandLink id="lnkEditar" immediate="true"
title="#{msg['titulo.edicao']}" process="@this"
update=":formPrincipal:dlgPerfil"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao(perfil)}"
oncomplete="dlgPerfil.show();">
<h:outputText value="#{msg['titulo.edicao']}" />
</p:commandLink>
public class PerfilAcessoORM {
private Long id;
private String nome;
private String descricao;
private Boolean situacao = null;
private List<FuncaoORM> funcoes;
// Getters & Setters
}
public class FuncaoORM {
private Long id;
public String descricao;
// Getters & Setters
}
<!-- OPEN DIALOG TO CREATE A NEW PROFILE -->
<p:commandButton id="btnIncluir" value="Incluir"
update="dlgPerfil" immediate="true"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao}"
oncomplete="dlgPerfil.show();">
<f:setPropertyActionListener target="#{perfilAcessoMB.perfil}" value="#{null}"/>
</p:commandButton>
<!-- OPEN DIALOG TO EDIT A NEW PROFILE -->
<p:commandLink id="lnkEditar" immediate="true"
title="Editar Perfil" update=":formPrincipal:dlgPerfil :formPrincipal:pnlPerfilEdicao"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao}"
oncomplete="dlgPerfil.show();">
<f:setPropertyActionListener target="#{perfilAcessoMB.perfil}" value="#{perfil}"/>
<h:outputText value="Editar" />
</p:commandLink>
public void abrirDialogoEdicao() {
if(this.perfil == null) {
this.perfil = new PerfilAcessoORM();
}
System.out.println("PerfilAcessoMB.onAbrirDialogoEdicao(): "
+ this.perfil);
// The rest remains the same ...
}
<!-- OPEN DIALOG TO EDIT A NEW PROFILE -->
<p:commandLink id="lnkEditar" immediate="true"
title="#{msg['titulo.edicao']}" process="@this"
update=":formPrincipal:dlgPerfil"
actionListener="#{perfilAcessoMB.abrirDialogoEdicao(perfil)}"
oncomplete="dlgPerfil.show();">
<h:outputText value="#{msg['titulo.edicao']}" />
</p:commandLink>