【问题标题】:jstl: how to know the variable? does it have some scope?jstl:如何知道变量?它有一些范围吗?
【发布时间】:2012-10-08 16:19:25
【问题描述】:

我只想在 SpringMVC 中使用 jstl:core。

我的控制器包含类似:

private Map<UUID, ProductBean> products = new ConcurrentHashMap<UUID, ProductBean>();

... ... ...

@RequestMapping(value="/createproduct/{pbid}", method=RequestMethod.GET)
public String getProduct(HttpServletRequest req, Model model, @PathVariable("pbid") UUID pbid) {
    if(!products.containsKey(pbid)){
        ProductBean tmp=new ProductBean();
        products.put(pbid, tmp);
        //model.addAttribute("product",tmp);
        System.err.println("============empty now===============\n");
    }else{
        ProductBean tmp=products.get(pbid);
        System.err.println(pbid.toString());
        System.err.println(tmp.getMpf().printFileNameList());
    }
    req.getSession().setAttribute("pbId", pbid);
    model.addAttribute("pbId", pbid);
    return "production/createproduct";
}

我想简单地使用 jstl,例如:

    <c:choose>

                <c:when test="${products.get(pbId).getMpf().size()==0}">

                    <p>No pictures uploaded</p>
                </c:when>
                <c:otherwise>

                    <ul id="products">
                                            ......
                    </ul>
                </c:otherwise>
    </c:choose>

但是程序永远不会去第一个分支

我在我的 jsp 中添加了 包,但它似乎不起作用。我遵循http://www.springbyexample.org/examples/spring-web-flow-subflow-webapp-jsp-example.html 中的示例。似乎他们也有变量没有像 ${persons} 那样在 jsp 中声明。我希望 products 变量可以同时使用控制器和 jsp 视图部分。我需要做什么?我应该在哪里申报?我需要在我的 jsp 中包含其他数据包吗?

【问题讨论】:

    标签: spring jsp jstl jsp-tags


    【解决方案1】:

    看起来您的控制器已注释掉以下行:

    //model.addAttribute("product",tmp);
    

    JSP 正在模型中查找名为products 的对象。这是通过${products} 引用某些内容时的默认范围。由于您的控制器从不添加具有此名称的对象,因此 c:when 失败。

    此外,要访问 JSTL 中的列表元素,请使用以下符号:

    ${products[4]}
    

    请参阅How to select the first element of a set with JSTL? 了解更多详情。

    此外,您也不应该使用.getXxx()。假设您的对象符合Javabean spec,您引用的项目名称如下:

    ${products[4].mpf}
    

    【讨论】:

    • 我想用 pbid 代替我有 model.addAttribute("pbId", pbid);当我想获得产品时,我使用 products.get(pbId) 可以吗?
    • 没关系,您只需将两个对象(productspbId)添加到模型中。您还必须使用数组表示法(而不是 get)来访问 JSTL 中列表的元素。我已经编辑了帖子以反映这一点。
    • products 对象不是列表,它是一个地图。
    • 同样适用...${products['key']}.
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2010-12-18
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2015-08-16
    • 2015-03-08
    相关资源
    最近更新 更多