2011-03-23 87 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