【问题标题】:Restricting the scope of a model in JSP在 JSP 中限制模型的范围
【发布时间】:2009-05-27 05:43:16
【问题描述】:

如果我将一个名为“foo”的对象放入 Spring 控制器中的模型中,并想限制其范围,我该怎么做。

假设我有一个使用 jsp 标记的页面,该标记将“foo”作为参数。如果我在 jsp 中调用标签,例如<tag foo="${bar}" />,在我看来,模型“foo”正在干扰“bar”。

或者即使不是,如果我只是想将模型“foo”的范围限制为只能在 jsp 页面中访问,而不能在其他页面中访问(在 'ed 页面中或在第一个 jsp 页面调用的标记中。)

【问题讨论】:

    标签: spring jsp jsp-tags


    【解决方案1】:

    基本上你不能限制范围。将对象从控制器传递到视图的唯一方法是通过请求范围属性。

    如果单个页面有很多不同的视图/控制器,您可能希望对请求属性有一个命名约定,例如控制器的类名。唯一的麻烦是访问它们不是那么干净

    ${requestScope['com.your.app.Controller.RESULT']}
    

    一种可能是用于创建变量的页面范围版本:

    <c:set var='result' value="${requestScope['com.your.app.Controller.RESULT']}"/>
    ...
    ${result}
    

    在您的示例中,我不确定我是否会说“foo”干扰了“bar”,看起来您将 bar 作为参数传递给标记?

    【讨论】:

    • 谢谢。在示例中,是的,我将 bar 作为参数传递。但是在标签中,我得到的是“model foo”,而不是 bar,作为绑定到“parameter foo”的值。至少,我过去在名字冲突方面遇到过麻烦。我不确定我是否遇到了另一个问题,但我觉得请求参数“foo”会覆盖标签中的标签参数“foo”。
    • 我认为可能还有另一个问题,请求参数不会传递给任何东西,除非您特别要求它们通过 EL 表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2013-02-26
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多