Struts Tiles,如何正确处理这种情况?

时间:2011-09-16 14:10:31

标签: model-view-controller design-patterns java-ee struts2 tiles2

我刚开始学习struts(+ spring)MVC,我可以对这种情况使用一些解释:

我正在使用Struts Tiles作为我的表示层,我希望在几个图块中显示一些数据库中的数据,主要内容图块将形成完整的页面。我无法弄清楚这样做的正确方法,这符合mvc模式/最佳实践。

这些图块的内容是从数据库中获取的,它不是基于用户输入,例如瓷砖列出了添加到商店等的少数最新产品。

我做了什么: 我用静态方法创建了类'A',查询数据库并返回几个最终产品的列表,在这个瓷砖的jsp中,我刚刚把scriptlet放在: <%为A.GetLastestProducts()中的每个项目;显示数据%>

但我被告知这样做的方法很糟糕

有人可以解释我如何正确处理这种情况,例如“创建将查询数据库的类,而不是创建blach blach blach,然后在你的tile jsp blach blach”

感谢

1 个答案:

答案 0 :(得分:1)

如果您正在使用struts,我建议您为JSP使用struts架构。我可能会将它的结构与此类似:

public class MyStutsAction extends ActionSupport implements preparable{

    private List<MyNewProducts> newProducts;

    @Override
    public void prepare() throws Exception {
        if(products == null){
            products = MyNewProductsDAO.getProductList();
        }
    }

    //Struts action stuff

    public List<MyNewProducts> getNewProducts(){
        return newProducts;
    }

    public setNewProducts(List<MyNewProducts> newProdcuts){
        this.newProducts = newProducts;
    }

}

然后,您可以从JSP页面访问它:

<s:iterator value="newProducts" status="stat">
    <div> <s:property value="%{attributeName}" /> </div>
</s:iterator>

这将通过在值堆栈中维护您的产品列表来消除一些不必要的数据库调用,并且如果由于某种原因它是null,则prepare方法中的条件将填充列表。