2011-03-23 86 views
0

在Struts2中工作时,创建一个模板并引用一个URL而不创建相关的Action就太简单了。 Struts2高兴地呈现了模板 - 在大多数情况下都很好,但在我们的例子中没有问题:为了确保正确选择语言环境,我们需要所有的请求都通过一个最小的拦截器栈。如何确保所有请求都通过拦截器堆栈?

我们一直在研究这两种方式,都没有成功:

  1. 定义其 将任何模板 不具有关联 动作来执行的“默认操作”。

  2. 禁用能力 渲染模板没有动作 - 这将迫使程序员定义任何模板, 这是一个很好的解决方案过于动作。

谢谢。

回答

1

也许看看通配符映射。

<action name="*" class="struts2you.examplelogin.BaseActionSupport"> 
    <result name="success">{1}.jsp</result> 
</action> 

如果你把这样的事情作为第一个动作,我认为所有的未映射的jsp将通过默认的拦截器栈,你可以在struts.xml中定义

然后也将在你的JSP文件中运行防止直接访问的WEB-INF目录

+0

我们已经完成了这一步 - 有点麻烦,因为我们不使用XML来配置Struts,而是注释,所以优先级不是那么清楚。但足以达到目的。 – jsalvata 2011-03-25 00:56:19

1

在Struts2中工作时,创建模板并引用URL而不创建关联的Action就太简单了。

由于Struts2是一个MVC框架,它的每个请求都应该调用一个动作类,因此需要通过一个拦截器堆栈。我假定你的意思是说你有JSP不在WEB-INF之下,所以可以通过URL直接调用它们。这在MVC世界中通常是一个糟糕的做法,因为您的JSP只能代表视图层。将JSP放置在WEB-INF下的某个位置,并且所有请求都将被强制执行,这将解决您的问题。

至于选择,我会主张为每个模板创建显式映射。

+0

你是对的。我们将在下一个版本中采用此解决方案。谢谢。 – jsalvata 2011-03-25 00:57:15