【问题标题】:selectOneMenu validation errorselectOneMenu 验证错误
【发布时间】:2012-05-21 10:22:21
【问题描述】:

我实现了允许我显示依赖于另一个下拉列表的代码。一切正常,除了当我尝试检索和显示两个字段的值时,它会引发以下错误:

form:parcours : erreur : 取消验证。不正确的价值

英文:

form:parcours : 验证错误。值无效

我正在使用 JSF 2.0、EJB 3.0、JPA 2.0 和 PrimeFaces 3.2。

查看:

    <h:form id="form" >

<!-- <p:growl id="msgs" showDetail="true"/> -->
<h:messages globalOnly="true"/>
<p:growl   id="msgs" showDetail="true" />


<p:panel header="Double Combo" style="margin-bottom:10px;">
    <h:panelGrid columns="2" cellpadding="5">

        <p:selectOneMenu id="countries" value="#{plansEtude.selectedDep}">
            <f:selectItem itemLabel="Select Country" itemValue="" />
            <f:selectItems value="#{plansEtude.depList}" var="c" itemLabel="#{c.nomDepFr}" itemValue="#{c.id}"/>
            <p:ajax update="parcours,parcoursTab"
                    listener="#{plansEtude.handleDepChange}" />
        </p:selectOneMenu>
        <p:selectOneMenu id="parcours" value="#{plansEtude.selectedParcours}" >
            <f:convertNumber maxFractionDigits="0"/>
            <f:selectItem itemLabel="Select City" itemValue="" />
            <f:selectItems value="#{plansEtude.parcoursList}" var="ct" itemLabel="#{ct.designParcours}" itemValue="#{ct.id}"   />

        </p:selectOneMenu>

    </h:panelGrid>
    <p:separator />

        <p:commandButton value="Submit" update="msgs" actionListener="#{plansEtude.displayLocation}" id="btnSubmit"/>

    </p:panel>

控制器:

@EJB
private DepartementFacade departementFacade;
@EJB
private ParcoursFacade parcoursFacade;
private List<Departement> depList;
private List<Parcours> parcoursList;
private Integer selectedDep;
private Integer selectedParcours;


public PlansEtude() {
}

public DepartementFacade getDepartementFacade() {
    return departementFacade;
}

public void setDepartementFacade(DepartementFacade departementFacade) {
    this.departementFacade = departementFacade;
}

public ParcoursFacade getParcoursFacade() {
    return parcoursFacade;
}

public void setParcoursFacade(ParcoursFacade parcoursFacade) {
    this.parcoursFacade = parcoursFacade;
}

public List<Departement> getDepList() {
    depList = getDepartementFacade().findAll();
    return depList;
}

public void setDepList(List<Departement> depList) {

    this.depList = depList;
}

public List<Parcours> getParcoursList() {
    return parcoursList;
}

public void setParcoursList(List<Parcours> parcoursList) {
    this.parcoursList = parcoursList;
}

public Integer getSelectedDep() {
    return selectedDep;
}

public void setSelectedDep(Integer selectedDep) {
    this.selectedDep = selectedDep;
}

public Integer getSelectedParcours() {
    return selectedParcours;
}

public void setSelectedParcours(Integer selectedParcours) {
    this.selectedParcours = selectedParcours;
}

public void handleDepChange(){
     if(selectedDep !=null && !selectedDep.equals(""))  

       parcoursList = parcoursFacade.findParcoursInDep(selectedDep);  
   else  
        parcoursList = new ArrayList<Parcours>();

}

public void handleParcoursChange(){

}

public void displayLocation() {  
    String monMessage="Departement :" + selectedDep + ", Parcours : " + selectedParcours;
    FacesMessage msg = new FacesMessage("Selected", monMessage);  

    FacesContext.getCurrentInstance().addMessage(null, msg);  
}

}

parcoursFacade:

 public List<Parcours> findParcoursInDep(Integer dep){
    Query query = em.createNamedQuery("Parcours.findParcoursInDep");
    query.setParameter("dep", dep);
    return (List<Parcours>)query.getResultList();
}

命名查询:

     @NamedQuery(name = "Parcours.findParcoursInDep", query = "SELECT p FROM Parcours p WHERE p.departementid.id = :dep"),

【问题讨论】:

  • 如果表单中存在验证错误,则不会提交,因此不会调用方法 displayLocation()。为什么将 添加到第二个 selectOneMenu?另外,我没有看到表单标签的关闭,表单中还有其他输入组件吗?它有验证吗?

标签: jsf-2


【解决方案1】:

从您的 parcours 下拉菜单中删除 &lt;f:convertNumber maxFractionDigits="0"/&gt;。这没有道理。它只会在您需要 Integer 时将数字转换为 BigDecimal

另一个可能的原因是#{plansEtude.parcoursList} 在表单提交期间发生了不兼容的更改,因为托管 bean 是请求范围的。您需要确保托管 bean 至少放置在视图范围内,以便为提交保留 parcoursList

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2013-04-09
    • 2013-08-04
    • 2013-01-31
    • 2011-06-01
    • 2012-11-22
    • 2013-08-27
    • 2013-01-06
    相关资源
    最近更新 更多