Jsf 验证和丰富:popupPanel don';行不通
我的意图是在BD中插入一条记录后,在rich:popupPanel中向用户显示一条消息Jsf 验证和丰富:popupPanel don';行不通,jsf,richfaces,popuppanel,Jsf,Richfaces,Popuppanel,我的意图是在BD中插入一条记录后,在rich:popupPanel中向用户显示一条消息 <h:outputLabel value="Nome:" for="nome1" /> <h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/> <h:outputLabel value="Logradouro:" for
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
使用下面的代码,我可以做我想做的事情,但有一个问题。仅当我正确键入所有页面字段时才起作用。如果其中一个字段未通过验证,则验证消息将显示在h:messages中,并且页面不会更改,即使我更改了字段的内容并再次单击按钮也是如此
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
有什么不对劲吗
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
- 页面
<h:outputLabel value="Nome:" for="nome1" /> <h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/> <h:outputLabel value="Logradouro:" for="logradouro" /> <h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/> <h:outputLabel value="Bairro:" for="bairro" /> <h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" /> <h:outputLabel value="CEP:" for="cep" /> <h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true"> <f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" /> </h:inputText> <a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/> <a4j:outputPanel id="outPnlOk" ajaxRendered="true"> <rich:popupPanel id="pnlOk" modal="true" height="150"> <h:graphicImage value="/images/info.jpg" /> <h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" /> <h:commandButton value="OK" action="dizimista?faces-redirect=true" onclick="#{rich:component('pnlOk')}.hide(); return false;" > <a4j:ajax execute="formPnlOk" /> </h:commandButton> </rich:popupPanel> </a4j:outputPanel>
<h:outputLabel value="Nome:" for="nome1" /> <h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/> <h:outputLabel value="Logradouro:" for="logradouro" /> <h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/> <h:outputLabel value="Bairro:" for="bairro" /> <h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" /> <h:outputLabel value="CEP:" for="cep" /> <h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true"> <f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" /> </h:inputText> <a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/> <a4j:outputPanel id="outPnlOk" ajaxRendered="true"> <rich:popupPanel id="pnlOk" modal="true" height="150"> <h:graphicImage value="/images/info.jpg" /> <h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" /> <h:commandButton value="OK" action="dizimista?faces-redirect=true" onclick="#{rich:component('pnlOk')}.hide(); return false;" > <a4j:ajax execute="formPnlOk" /> </h:commandButton> </rich:popupPanel> </a4j:outputPanel>
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
public void inserirDizimista(){
try{
defineDizimista("formNovoDizimista");
dizimistaFacade.criar(dizimista);
setTextoModal("Dizimista inserido com sucesso");
System.out.println("Dizimista '" + dizimista.getNome1() + "' inserido com sucesso");
dizimista = null;
} catch (DAOException e) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null);
JSFHelper.getFacesContext().addMessage("ATENÇÃO!", msg);
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void defineDizimista(String nomeForm){
Map<String, String> dados = getDadosFormulario(nomeForm);
dizimista.setNome1(dados.get("nome1"));
dizimista.setLogradouro(dados.get("logradouro"));
dizimista.setBairro(dados.get("bairro"));
dizimista.setCep(Integer.parseInt(dados.get("cep")));
}
private Map<String, String> getDadosFormulario(String form){
Map<String, String> dados = new HashMap<String, String>();
dados.put("nome1", JSFHelper.getRequestParameter(form +
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext()) + "nome1"));
dados.put("logradouro", JSFHelper.getRequestParameter(form +
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext()) + "logradouro"));
dados.put("bairro", JSFHelper.getRequestParameter(form +
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext()) + "bairro"));
dados.put("cep", JSFHelper.getRequestParameter(form +
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext()) + "cep"));
dados.put("cidade", JSFHelper.getRequestParameter(form +
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext()) + "cidade"));
return dados;
}
public void inserirdizimita(){
试一试{
定义新齐米斯塔(“新齐米斯塔”);
dizimista.criar(dizimista);
setTextoModal(“Dizimista inserido com Successo”);
System.out.println(“Dizimista'”+Dizimista.getNome1()+“'inserido com successo”);
dizimista=null;
}捕获(DAOE){
FacesMessage msg=新的FacesMessage(FacesMessage.SEVERITY_错误,例如getMessage(),null);
JSFHelper.getFacesContext().addMessage(“ATENÃO!”,msg);
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
}
专用void defineDzimista(字符串形式){
Map dados=getDadosFormulario(nomeForm);
dizimista.setNome1(护墙板.get(“nome1”);
dizimista.setLogradouro(dados.get(“logradouro”);
dizimista.setBairro(dados.get(“bairro”);
setCep(Integer.parseInt(dados.get(“cep”));
}
私有映射getDadosFormulario(字符串形式){
Map dados=新的HashMap();
put(“nome1”,JSFHelper.getRequestParameter(表单+
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext())+“nome1”);
put(“logradouro”,JSFHelper.getRequestParameter(表单+
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext())+“logradouro”);
put(“bairro”,JSFHelper.getRequestParameter(表单+
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext())+“bairro”);
put(“cep”,JSFHelper.getRequestParameter(表单+
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext())+“cep”);
put(“cidade”,JSFHelper.getRequestParameter(表单+
UINamingContainer.getSeparatorChar(JSFHelper.getFacesContext())+“cidade”);
返回护墙板;
}
当您通过AJAX(从
a4j:commandButton
呈现)呈现rich:popupanel
的内容时,最好选择有条件地显示它,而不是调用Javascript代码(oncomplete)
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
因此,我建议您添加一个条件来显示popupanel
。假设textoModal
在初始化时为null,并且您的bean是一个请求作用域,您可以使用如下内容:
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
<rich:popupPanel id="pnlOk" modal="true"
show="#{dizimistaMB.textoModal != null}" ...>
。。。并从方法中删除ActionEvent
参数inserirdizimita
,使其成为一个
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>
这应该会让你的工作顺利进行。你不应该使用。你也不应该对例外情况保持沉默。验证失败时控制台上是否打印任何内容?感谢您的回复和此链接。老实说,我仍然不知道action和actionlistener之间的区别。关于例外情况,我很抱歉,只是想简化代码。谢谢你的评论,不客气。那么,你的问题解决了吗?即使你关于行动的建议不起作用,如果你能帮助我,谢谢。我改为“操作”,但单击验证消息会显示在h:messages中,但弹出面板显示时没有任何文本。我想要的是只有在成功的情况下才会展示出来。按原样,即使正确输入字段,也不会调用insert方法。您可以按现在的方式发布MB代码的完整代码吗?
<h:outputLabel value="Nome:" for="nome1" />
<h:inputText id="nome1" maxlength="50" required="true" requiredMessage="Informe um nome" immediate="true"/>
<h:outputLabel value="Logradouro:" for="logradouro" />
<h:inputText id="logradouro" maxlength="50" required="true" requiredMessage="Informe o logradouro" immediate="true"/>
<h:outputLabel value="Bairro:" for="bairro" />
<h:inputText id="bairro" maxlength="45" required="true" requiredMessage="Informe o bairro" immediate="true" />
<h:outputLabel value="CEP:" for="cep" />
<h:inputText id="cep" maxlength="8" required="true" requiredMessage="Informe o CEP" immediate="true">
<f:convertNumber integerOnly="true" groupingUsed="false" maxIntegerDigits="8" />
</h:inputText>
<a4j:commandButton id="btnInserirDizimista" value="Inserir" oncomplete="#{rich:component('pnlOk')}.show()" render="pnlMessages outPnlOk" actionListener="#{dizimistaMB.inserirDizimista}"/>
<a4j:outputPanel id="outPnlOk" ajaxRendered="true">
<rich:popupPanel id="pnlOk" modal="true" height="150">
<h:graphicImage value="/images/info.jpg" />
<h:outputText id="textoModalOk" value="#{dizimistaMB.textoModal}" />
<h:commandButton value="OK" action="dizimista?faces-redirect=true"
onclick="#{rich:component('pnlOk')}.hide(); return false;" >
<a4j:ajax execute="formPnlOk" />
</h:commandButton>
</rich:popupPanel>
</a4j:outputPanel>