【问题标题】:Struts Tiles, how to handle this situation correctly?Struts Tiles,如何正确处理这种情况?
【发布时间】:2011-09-16 14:10:31
【问题描述】:

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

我正在为我的表示层使用 Struts Tiles,我想在几个瓦片中显示来自数据库的一些数据,这些瓦片与主要内容瓦片将形成完整的页面。我想不出适合 mvc 模式/最佳实践的正确方法。

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

我做了什么: 我用静态方法创建了“A”类,该方法查询数据库并返回一些最新产品的列表,并且在这个图块的 jsp 中,我刚刚将 scriptlet 放在:

但有人告诉我这样做很糟糕

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

谢谢

【问题讨论】:

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


    【解决方案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>
    

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

    【讨论】:

    • 谢谢,我觉得它很有帮助,但是以我对 struts 的理解水平,在调用 MyStutsAction 并显示映射到方法结果的页面之后,它会像我页面上的几个图块之一一样填充,如果我想要在同一页面上的另一个图块,其内容也形成数据库,但我希望它与 MyStutsAction 分开,作为可重复使用的图块
    • 然后使用接口或基本操作。
    • @Steven Benitez,我不确定你的意思是什么,让我重新表述一下这个问题。据我了解,一个 struts 动作会产生要在一个视图中显示的数据。也许我错了,但我正在考虑将一个 struts Tile 作为一个视图,现在,我想构建由几个图块组成的页面,所有图块相互分离,它们可以在其他页面上重复使用,所以现在我想知道用数据填充所有图块的表单设计观点的正确方法是什么
    • 所有图块在一起 = 1 个视图。 Tiles 只是让您重用页面的公共部分,如页眉、页脚等。最终结果是浏览器的单个 HTML 文档,由一个操作支持。
    • 另一种选择是将包含新产品的 jsp 包含在内。在您需要的任何其他页面上,您只需执行 。正如史蒂夫所提到的,已经为此功能构建了图块,您应该知道每个操作上存在哪些图块,因为 struts.xml 中的操作定义与您的图块.xml 一起确定存在哪些图块。您只需将上述代码添加到您需要的每个操作中。
    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多