JSF ajax 验证不验证需要 true 的项目
Posted
技术标签:
【中文标题】JSF ajax 验证不验证需要 true 的项目【英文标题】:JSF ajax validation don't validate items with required true 【发布时间】:2013-07-23 09:37:55 【问题描述】:我有一个数据表,一个带有 h:commandlink 的列用于编辑(ajax 请求),详细信息显示在 jquery 对话框中,一切正常,在编辑表单中我有 h:commandlink(ajax 请求)用于保存,如果我制作更改,例如,在所需的输入中删除一个值,然后推送提交,jsf 不验证此输入,并且不显示消息“此输入是必需的”
<div id="container">
<button id="create-user" >Create new user</button>
<h:dataTable value="#gasweb.lsProveedor" var="tabpro" id="example" class="display dataTable" >
<h:column>
<f:facet name="id">
<h:outputLabel value="Id"/>
</f:facet>
<h:outputText value="#tabpro.proveedor_id"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Cedula"/>
</f:facet>
<h:outputText value="#tabpro.cedula_ruc"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="NombreComercial"/>
</f:facet>
<h:commandLink value="#tabpro.nombre_comercial" actionListener="#gasweb.doEditProveedor2" class="labrir" >
<f:param name="pproveedor_id" value="#tabpro.proveedor_id" />
<f:ajax execute="@this" render=":forma:editgrid" >
</f:ajax>
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Razon Social"/>
</f:facet>
<h:outputText value="#tabpro.razon_social"/>
</h:column>
</h:dataTable>
</div>
<div id="divformap" title="Proveedor">
<h:inputHidden value="#gasweb.newRecord" id="txtnewrecord" />
<h:inputHidden value="#gasweb.ruc_proveedor_ori" id="txtcedulaori" />
<h:panelGrid columns="2" id="editgrid" >
<h:outputLabel value="Id :" />
<h:outputText id="txtid" value="#gasweb.proveedor.proveedor_id" />
<h:outputLabel value="Ruc :" />
<h:inputText id="txtcedula" value="#gasweb.proveedor.cedula_ruc" size="20" class="text ui-widget-content ui-corner-all" />
<h:outputLabel value="Nombr Comercial :" />
<h:inputText id="txtnombre" value="#gasweb.proveedor.nombre_comercial" required="true" size="80" class="text ui-widget-content ui-corner-all"/>
<h:outputLabel value="Razón Social :" />
<h:inputText id="txtrazon" value="#gasweb.proveedor.razon_social" size="80" class="text ui-widget-content ui-corner-all"/>
<h:outputLabel value="Dirección :" />
<h:inputText id="txtdireccion" value="#gasweb.proveedor.direccion" size="80" class="text ui-widget-content ui-corner-all"/>
<h:outputLabel value="Telefono :" />
<h:inputText id="txttelefono" value="#gasweb.proveedor.telefono" size="20" class="text ui-widget-content ui-corner-all"/>
<h:outputLabel value="Estado :" />
<h:outputText id="txtestado" value="#gasweb.proveedor.estado" />
<h:commandButton id="aceptar" value="Aceptar" actionListener="#gasweb.doGrabaProveedor" >
<f:param name="pproveedor_id2" value="#gasweb.proveedor.proveedor_id" />
<f:ajax render="bProveedor" execute="@form" onevent="resetFocus" />
</h:commandButton>
<h:outputText id="bProveedor" value="#gasweb.bProveedorExiste" />
</h:panelGrid>
</div>
我的托管 bean
公共类 GasperWebMB 实现 Serializable
private List<Contribuyente> lsContribuyente;
private List<Proveedor> lsProveedor;
private Contribuyente contribuyente;
private Proveedor proveedor;
private Declara serdec;
private FacesContext fc = FacesContext.getCurrentInstance();
private Boolean newRecord;
private String ruc_proveedor_ori;
private String bProveedorExiste;
//@ManagedProperty("#param.pproveedor_id")
//private Integer pproveedor_id;
//private HttpServletRequest request;
public GasperWebMB()
serdec = new Declara();
contribuyente = new Contribuyente();
proveedor = new Proveedor();
lsContribuyente = serdec.getAllContribuyente();
lsProveedor = serdec.getAllProveedor();
newRecord = true;
log("creado");
//request.getHeader(ruc_proveedor_ori);
public String getbProveedorExiste()
return bProveedorExiste;
public void setbProveedorExiste(String bProveedorExiste)
this.bProveedorExiste = bProveedorExiste;
public String getRuc_proveedor_ori()
log(ruc_proveedor_ori);
return ruc_proveedor_ori;
public void setRuc_proveedor_ori(String ruc_proveedor_ori)
log(ruc_proveedor_ori);
this.ruc_proveedor_ori = ruc_proveedor_ori;
public Boolean getNewRecord()
log(newRecord);
return newRecord;
public void setNewRecord(Boolean newRecord)
log(newRecord);
this.newRecord = newRecord;
public List<Proveedor> getLsProveedor()
log(lsProveedor);
return lsProveedor;
public void setLsProveedor(List<Proveedor> lsProveedor)
log(lsProveedor);
this.lsProveedor = lsProveedor;
public Proveedor getProveedor()
log(proveedor);
return proveedor;
public void setProveedor(Proveedor proveedor)
log(proveedor);
this.proveedor = proveedor;
public List<Contribuyente> getLsContribuyente()
return lsContribuyente;
public void setLsContribuyente(List<Contribuyente> lsContribuyente)
this.lsContribuyente = lsContribuyente;
public Contribuyente getContribuyente()
return contribuyente;
public void setContribuyente(Contribuyente contribuyente)
this.contribuyente = contribuyente;
public String doEditContribuyente()
Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
contribuyente = serdec.getContribuyenteById(Integer.parseInt(par));
newRecord = false;
ruc_proveedor_ori = proveedor.getCedula_ruc();
return "FContribuyente";
public String doGrabaContribuyente()
System.out.println("grabar " + contribuyente.getCedula_ruc()+ " id " + contribuyente.getContribuyente_id());
serdec.updContribuyente(contribuyente);
return "lisContribuyente";
public String doEditProveedor()
System.out.println("Entra");
Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
String par = params.get("pproveedor_id");
System.out.println("pro" + par);
proveedor = serdec.getProveedorById(Integer.parseInt(par));
newRecord = false;
System.out.println("va a salir");
return "editprov";
public void doGrabaProveedor(ActionEvent event)
System.out.println("gra"+proveedor.getNombre_comercial()+" new "+ newRecord);
Proveedor xpro = serdec.getProveedorByRuc(proveedor.getCedula_ruc());
if (xpro != null && !proveedor.getCedula_ruc().equals(ruc_proveedor_ori))
System.out.println("Ya existe");
bProveedorExiste = xpro.getNombre_comercial();
//FacesContext.getCurrentInstance().validationFailed();
FacesMessage fmes = new FacesMessage("El Ruc "+proveedor.getCedula_ruc()+" ya se encuentra registrado para otro proveedor");
fc.addMessage(null, fmes);
//fc.addMessage("Proveedor ya existe", fmes);
//return "sucess";
return;
if (newRecord)
proveedor.setEstado("A");
//serdec.insProveedor(proveedor);
else
//serdec.updProveedor(proveedor);
System.out.println("Si graba");
//return "sucess";
public void doEditProveedor2(ActionEvent event)
/*Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
String par = params.get("pproveedor_id");
proveedor = serdec.getProveedorById(Integer.parseInt(par));
newRecord = false;
return "FProveedor";*/
String pproveedor_id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pproveedor_id");
proveedor = serdec.getProveedorById(Integer.parseInt(pproveedor_id));
newRecord = false;
System.out.println("si edit2 param "+ pproveedor_id + " new "+ newRecord);
System.out.println("si edit2 proveedor "+ proveedor.getNombre_comercial() + " new "+ newRecord);
private void log(Object object)
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
System.out.println("Bean " + methodName + ": " + object);
在此代码中,删除了 jquery 对话框并在 div 中显示详细信息
【问题讨论】:
添加 h:messages 以显示人脸消息。 【参考方案1】:您必须将<h:messages />
或<h:message />
放在html 页面上。h:messages
– 输出当前页面中的所有消息。h:message
– 为特定组件输出一条消息.
1-在您的情况下,请尝试将<h:messages />
放在首页或编辑表单内。
2- 或者您可以为每个必需的输入添加<h:message />
,例如 <h:message for="txtnombre" style="color:red" />
在输入之后/之前。
【讨论】:
我将 h:messages 放在 html 页面和表单内,但结果相同,在 ajax 请求后不显示验证。我为每个必需的输入添加了 h:message,什么都没有以上是关于JSF ajax 验证不验证需要 true 的项目的主要内容,如果未能解决你的问题,请参考以下文章