0

提交带有级联 SelectOneMenu 的表单时,我遇到了验证错误:当我为我的 bean 使用 sessionscoped 时,它可以工作,但是对于 requestscoped 参数,它不行,我得到了著名的验证错误。对于我的应用程序限制,我需要使用 requestscoped 。

这是我的豆子

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
@ManagedBean(name="pprBean")
@RequestScoped
public class PPRBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String city;

    private String suburb;
    private UIInput sourceMenu;

    private Map<String,String> cities = new HashMap<String, String>();

    private Map<String,Map<String,String>> suburbsData = new HashMap<String, Map<String,String>>();

    private Map<String,String> suburbs = new HashMap<String, String>();


    public UIInput getSourceMenu() {
        return sourceMenu;
    }

    public void setSourceMenu(UIInput sourceMenu) {
        this.sourceMenu = sourceMenu;
    }

    public PPRBean() {
        cities.put("Istanbul", "Istanbul");
        cities.put("Ankara", "Ankara");
        cities.put("Izmir", "Izmir");

        Map<String,String> suburbsIstanbul = new HashMap<String, String>();
        suburbsIstanbul.put("Kadikoy", "Kadikoy");
        suburbsIstanbul.put("Levent", "Levent");
        suburbsIstanbul.put("Cengelkoy", "Cengelkoy");

        Map<String,String> suburbsAnkara = new HashMap<String, String>();
        suburbsAnkara.put("Kecioren", "Kecioren");
        suburbsAnkara.put("Cankaya", "Cankaya");
        suburbsAnkara.put("Yenimahalle", "Yenimahalle");

        Map<String,String> suburbsIzmir = new HashMap<String, String>();
        suburbsIzmir.put("Cesme", "Cesme");
        suburbsIzmir.put("Gumuldur", "Gumuldur");
        suburbsIzmir.put("Foca", "Foca");

        suburbsData.put("Istanbul", suburbsIstanbul);
        suburbsData.put("Ankara", suburbsAnkara);
        suburbsData.put("Izmir", suburbsIzmir);
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getSuburb() {
        return suburb;
    }

    public void setSuburb(String suburb) {
        this.suburb = suburb;
    }

    public Map<String, String> getCities() {
        return cities;
    }

    public void setCities(Map<String, String> cities) {
        this.cities = cities;
    }

    public Map<String, Map<String, String>> getSuburbsData() {
        return suburbsData;
    }

    public void setSuburbsData(Map<String, Map<String, String>> suburbsData) {
        this.suburbsData = suburbsData;
    }

    public Map<String, String> getSuburbs() {
        return suburbs;
    }

    public void setSuburbs(Map<String, String> suburbs) {
        this.suburbs = suburbs;
    }

    public void handleCityChange() {
        if(city !=null && !city.equals(""))
            suburbs = suburbsData.get(city);
        else
            suburbs = new HashMap<String, String>();
    }



    public String Connexion() {

        return "success";


    }
}

我的表单页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
       xmlns:p="http://primefaces.org/ui">




    <h:head>

    </h:head>
    <body class="box_center" >
    <h:form id="form">

    <p:growl id="msgs" showDetail="true"/>

    <p:panel header="Double Combo" style="margin-bottom:10px;">
        <h:panelGrid columns="2" cellpadding="5">
            <p:selectOneMenu id="city" value="#{pprBean.city}">
                <f:selectItem itemLabel="Select City" itemValue="" />
                <f:selectItems value="#{pprBean.cities}" />
                <p:ajax update="suburbs"
                        listener="#{pprBean.handleCityChange}" />
            </p:selectOneMenu>

              <p:selectOneMenu id="suburbs" value="#{pprBean.suburb}" >
                <f:selectItem itemLabel="Select Suburb" itemValue="" />
                <f:selectItems value="#{pprBean.suburbs}" />
            </p:selectOneMenu>
        </h:panelGrid>

        <p:separator />

        <h:commandLink action="#{pprBean.Connexion()}"   >
            Connexion
              </h:commandLink>

    </p:panel>

</h:form>
</body>
        </html>

我的结果页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
       xmlns:p="http://primefaces.org/ui">




    <h:head>

    </h:head>
    <body class="box_center" >
    <h:form id="form">

    <p:growl id="msgs" showDetail="true"/>
    pprBean.city :      <h:outputText value="#{pprBean.city}"/>
    pprBean.suburb :      <h:outputText value="#{pprBean.suburb}"/>
</h:form>
</body>
        </html>

我的面孔配置文件:

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">



     <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{pprBean.Connexion()}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/resultat.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>



</faces-config>

请任何帮助。

4

0 回答 0