jstl:如何知道变量?它有一定的范围吗?

时间:2012-10-08 16:19:25

标签: spring jsp jstl jsp-tags

我只想在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>

但该程序永远不会进入第一个分支

我添加了&lt;%@ page import =&#34; java.util。*&#34;语言=&#34;的java&#34; %GT;包装在我的jsp中,但似乎不起作用。我按照http://www.springbyexample.org/examples/spring-web-flow-subflow-webapp-jsp-example.html中的示例进行操作。看起来他们在jsp中也有变量没有声明,就像$ {persons}一样。我想产品变量可以同时适用于控制器和jsp视图部分。我需要做什么?我应该在哪里申报呢?我是否需要在我的jsp中包含其他数据包?

1 个答案:

答案 0 :(得分:0)

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

//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}