Ajax 3使用struts和hibernate的依赖项下拉列表(国家、州、城市)

Ajax 3使用struts和hibernate的依赖项下拉列表(国家、州、城市),ajax,hibernate,combobox,struts2,drop-down-menu,Ajax,Hibernate,Combobox,Struts2,Drop Down Menu,我有一个组合列表。国家、州和城市。我需要根据前面的组合列表更改列表,就像如果我更改了国家,我需要获得该国家的相应州列表,如果我选择了州,则需要该州的相应城市。有人能帮我找到答案吗。谢谢 public String getStateNCityList() { logger.info("Enter getStateNCityList"); try { AddressUtils addrUtil = new AddressUtils(); this.st

我有一个组合列表。国家、州和城市。我需要根据前面的组合列表更改列表,就像如果我更改了国家,我需要获得该国家的相应州列表,如果我选择了州,则需要该州的相应城市。有人能帮我找到答案吗。谢谢

public String getStateNCityList() {
    logger.info("Enter getStateNCityList");
    try {
        AddressUtils addrUtil = new AddressUtils();
        this.stateList = addrUtil.getStateList(this.getCountryId());
        this.cityList = addrUtil.getCityList(this.getStateList().get(0).getAddressComboId());
        this.session.put("stateList", this.stateList);
        this.session.put("cityList", this.cityList);
        System.out.println("state list size "+this.stateList.size());
        System.out.println("city list size "+this.cityList.size());
    } catch(Exception e) {
        logger.error(e,e);
        return ERROR;
    }
    logger.info("Exit getStateNCityList");
    return SUCCESS;
}
//addressUtils.java

public List<AddressComboDetails> getCountryList(){
    List<AddressComboDetails> countryList = new ArrayList<AddressComboDetails>();
    try{
    String query=" addressComboTypeId="+ApplicationConstants.COMBO_COUNTRY;
    countryList=addressDao.getAddressComboDetailsByWhereClause(query);
    System.out.println("countryList size" +countryList.size());
    } catch(Exception e) {
        logger.error("Exception in getCountryList" );
        logger.error(e,e);
    }
    return countryList;
}
public List getCountryList(){
List countryList=new ArrayList();
试一试{
String query=“addressComboTypeId=“+ApplicationConstants.COMBO\u国家/地区;
countryList=addressDao.GetAddressComboDetailsByWhere子句(查询);
System.out.println(“countryList size”+countryList.size());
}捕获(例外e){
logger.error(“getCountryList中的异常”);
记录器错误(e,e);
}
返回国家列表;
}
//HibernateJava类

public List<AddressComboDetails> getAddressComboDetailsByWhereClause(
        String whereClause) {
    logger.info("entered getAddresscomboDetailsByWhereClause ");
    List<AddressComboDetails> addressComboList = new ArrayList<AddressComboDetails>();
    Session session = null;

    try {
        session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        String query = " from AddressComboDetails  where " + whereClause;
        System.out.println("Query is "+query);
        addressComboList = (List<AddressComboDetails>) session.createQuery(query).list();
        tx.commit();

    } catch (HibernateException e) {
        logger.error("error in getAddresscomboDetailsByWhereClause"+ e.getMessage());
        logger.error(e,e);
    } finally {
        session.close();
    }
    return addressComboList;
}
public List getAddressComboDetailsByWhere子句(
字符串(第条){
info(“输入GetAddressComboDetailsBywhere子句”);
List addressComboList=新建ArrayList();
会话=空;
试一试{
session=HibernateUtil.getSession();
事务tx=会话.beginTransaction();
String query=“from AddressComboDetails where”+where子句;
System.out.println(“查询为”+查询);
addressComboList=(List)session.createQuery(query.List();
tx.commit();
}捕获(休眠异常e){
logger.error(“GetAddressComboDetailsByWhere子句中的错误”+e.getMessage());
记录器错误(e,e);
}最后{
session.close();
}
返回地址列表;
}
//我的jsp页面代码

<tr>
                <td class="generalText"><s:text name="country" /></td>
                <td><s:select listValue="addressComboValue" listKey="addressComboId" list="#session.countryList" onchange="dojo.event.topic.publish('address_country_details');return false;"
                    name="corpAddress.country.addressComboId" />
                    <s:set name="countryId" value="%{corpAddress.country.addressComboId}" /></td>
                    <td><s:url id="corp_country" action="getStateNCityList.action" >
                    <s:param name="countryId" value="%{11}"></s:param></s:url>
                     <sx:div id="country" cssStyle="display:none;" href="%{corp_country}" listenTopics="address_country_details" formId="supplierDetails" showLoadingText=""></sx:div>
            </tr>

向国家组合添加一个“更改”JavaScript事件侦听器,该侦听器将使用AJAX加载所选国家的州列表,并更改州组合的选项。对state组合执行相同的操作,以便加载城市


AJAX调用可以调用struts操作,返回HTML选项列表或州/市的JSON数组。struts操作应该使用Hibernate查询在数据库中查找一个国家(或一个州的城市)的州。

@JB Nizet:我尝试了所有方法,但无法显示列表。我也得到了大小。我正在使用DojoPublish并调用该操作。如果你有任何代码或东西,请让我知道。这将是非常感谢你。谢谢你的帮助reply@Ani:向我们展示您遇到问题的代码,告诉我们您的期望以及您得到的结果。我们愿意提供帮助,但不会为您实现所有应用。@JB Nizet:我已经更新了代码。您能帮我找到解决问题的方法吗?我无法在jsp页面中弹出列表数据。但我能够从数据库中正确获取列表大小。我正在使用pgsql。我不太了解Struts2和Dojo,但在我看来,当选择框中发生选择更改时,您所做的似乎使具有“country”id的div通过调用getstatencylist.action来加载其内容。在国家/地区选择框中进行选择时,是否可以确认在服务器日志中看到“输入GetStatencyList”和“退出GetStatencyList”?如果是,那么当操作返回成功时,您将向浏览器发送什么?换句话说,在该操作成功后执行哪个JSP?这个JSP应该生成第二个select box.SUCCESS,它将返回struts.xml文件,我将在该文件中有操作标记。如果函数返回SUCCESS,那么我将把它重定向到同一个JSP。这就是如何正确处理struts操作和jsp。