从JSP列表填充JavaScript的数组 [英] Populating JavaScript Array from JSP List

查看:118
本文介绍了从JSP列表填充JavaScript的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好了,所以也许有人可以帮我一个问题,我试图解决的问题。基本上我有一个JSP页面中它得到国家对象的列表(从方法referenceData()从Spring的Portlet SimpleFormController中,不完全相关,但以防万一提的是)。每个国家对象都有一组省的对象和每个省和国家有一个名称字段:

 公共类国家{
    私人字符串名称;
    私人设置<省及GT;省;    // getter和setter方法
}公共类省{
    私人字符串名称;    // getter和setter方法
}

现在我有两个下拉菜单在我的JSP为国家和省,我想,以滤除全国各省。我一直在关注这个教程/指南做出链在JavaScript中选择。

现在我需要一个动态的方式来创建从我的内容JavaScript数组。而有人提到AJAX之前这是不可能的,因为我们的项目使用的portlet和我们想使用框架,如DWR或创建一个servlet望而却步。这里是JavaScript / JSP我迄今但它不填充任何东西的数组:

  VAR国家=新的Array();
c为C:的forEach项目=$ {} countryListVAR =国家varStatus =状态>
    国家[status.index] =新的Array();
    国家[status.index] ['国家'] = $ {country.name};
    国家[status.index] ['省'] =
    [
        c为C:的forEach项目=$ {} country.provincesVAR =省varStatus =provinceStatus>
            $ {} province.name
            c为C:如果测试=$ {!provinceStatus.last}>
              ,
            < / C:如果>
        < / C:的forEach>
    ];
< / C:的forEach>

有谁知道如何在上述情况还是什么'最佳实践'会在这种情况下,可以考虑创建一个JSP JavaScript数组?在此先感谢!


解决方案

  VAR国家=新的Array();
c为C:的forEach项目=$ {} countryListVAR =国家varStatus =状态>
    countryDetails =新的对象();
    countryDetails.country = $ {country.name};
    VAR省份=新的Array();        c为C:的forEach项目=$ {} country.provincesVAR =省varStatus =provinceStatus>
           provinces.push($ {province.name});
        < / C:的forEach>
    countryDetails.provinces =省份;
    countries.push(countryDetails);
< / C:的forEach>

现在,你拥有的是这样的事情在JavaScript

  VAR国家= [
  {国家:美国,
  省:
    俄亥俄
    纽约,
    加利福尼亚
  ]},
  {国家:加拿大,
  省:
    安大略
    北领地
    Sascetchewan
  ]},
]

另一种选择是让你的输出看起来像我张贴的JavaScript。

  VAR国家= [
c为C:的forEach项目=$ {} countryListVAR =国家varStatus =状态>
    {国家:$ {} country.name,
    省:
        c为C:的forEach项目=$ {} country.provincesVAR =省varStatus =provinceStatus>
           $ {} province.name
           c为C:如果测试=$ {!provinceStatus.last}>
             ,
           < / C:如果>
        < / C:的forEach>
    ]}
    c为C:如果测试={!status.last} $>
      ,
    < / C:如果>
    < / C:的forEach>
];

Ok so perhaps someone can help me with a problem I'm trying to solve. Essentially I have a JSP page which gets a list of Country objects (from the method referenceData() from a Spring Portlet SimpleFormController, not entirely relevant but just mentioning in case it is). Each Country object has a Set of province objects and each province and country have a name field:

public class Country  {
    private String name;
    private Set<Province> provinces;

    //Getters and setters
}

public class Province {
    private String name;

    //Getters and setters
}

Now I have two drop down menus in my JSP for countries and provinces and I want to filter the provinces by country. I've been following this tutorial/guide to make a chain select in JavaScript.

Now I need a dynamic way to create the JavaScript array from my content. And before anyone mentions AJAX this is out of the question since our project uses portlets and we'd like to stay away from using frameworks like DWR or creating a servlet. Here is the JavaScript/JSP I have so far but it is not populating the Array with anything:

var countries = new Array();
<c:forEach items="${countryList}" var="country" varStatus="status">
    countries[status.index] = new Array();
    countries[status.index]['country'] = ${country.name};
    countries[status.index]['provinces'] =
    [
        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus">
            '${province.name}'
            <c:if test="${!provinceStatus.last}">
              ,
            </c:if>
        </c:forEach>
    ];
</c:forEach>

Does anyone know how to create an JavaScript array in JSP in the case above or what the 'best-practice' would be considered in this case? Thanks in advance!

解决方案

var countries = new Array();
<c:forEach items="${countryList}" var="country" varStatus="status"> 
    countryDetails = new Object();
    countryDetails.country = ${country.name}; 
    var provinces = new Array();

        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus"> 
           provinces.push(${province.name});
        </c:forEach> 
    countryDetails.provinces = provinces;
    countries.push(countryDetails);
</c:forEach> 

now what you have is something like this in javascript

var countries = [
  {country:"USA",
  provinces: [
    "Ohio",
    "New York",
    "California"
  ]},
  {country:"Canada",
  provinces: [
    "Ontario",
    "Northern Territory",
    "Sascetchewan"
  ]},
]

The other option would be to make your output look like the javascript I posted.

var countries = [
<c:forEach items="${countryList}" var="country" varStatus="status">  
    {country: '${country.name}',
    provinces : [ 
        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus">  
           '${province.name}'
           <c:if test="${!provinceStatus.last}">    
             ,    
           </c:if>   
        </c:forEach>  
    ]}
    <c:if test="${!status.last}">    
      ,    
    </c:if>  
    </c:forEach>  
];

这篇关于从JSP列表填充JavaScript的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆