2013-01-31 88 views
2

我在嘗試修改當前module當前處於活動狀態的頁面外觀。所以基本上,我有一個共同的jsp頁面集,需要根據模塊更改tile。動態修改Struts中的瓷磚

我可以在每個模塊中獨立實現基本圖塊。這要求我在jsp中指定瓦片的定義。所以我的問題是,如何更改定義,並因此根據模塊動態更改圖塊。我使用Struts 1.1的Tiles(不是我的選擇,但需求是這樣的),而且對這個框架來說是新的。

編輯:我試過瀏覽文檔,瀏覽其他論壇和博客,但沒有遇到類似的東西。有沒有其他的方式來實現這一點,可能沒有切換瓦片定義?

+0

你到底想改變什麼? –

+0

@dave-newton在JSP頁面中基於該模塊的圖塊。對於一組JSP,有兩組圖塊。 – Urban

+1

你是什麼意思的模塊和動態變化?模塊是一個帶有內部瓦片的jsp,另一個模塊是不同的jsp,具有不同的瓦片集合?那麼你可以創建一個動作,落在其中一個動作上? http://struts.apache.org/1.x/struts-tiles/examples.html告訴你如何有一個佈局來組合x個tile。難道你不能有另外一個不同的瓷磚佈局和一些鏈接,或者從這兩個佈局中去哪裏?瓦片的想法是,您定義一次,並通過在每個頁面中以不同的順序添加標籤,將n次組合到不同的佈局jsp:s。 – mico

回答

2

我從你的問題中瞭解到,你將在tiles-defs.xml文件中爲1個JSP定義2個定義。像

<definition name="outputPage" extends="mainLayout"> 
    <put name="title" value="HELLO" /> 
    <put name="body" value="/pages/Welcome.jsp" /> 
</definition> 
<definition name="outputPage2" extends="mainLayout"> 
    <put name="title" value="HELLO2" /> 
    <put name="body" value="/pages/tile2.jsp" /> 
</definition> 

的一種方式,我建議來實現你的要求是通過屬性設置模塊類型(比如request.setAttribute("module", "module2");)。

假設您將在struts-config.xml中爲同一個JSP頁面創建2個轉發。

在JSP頁面(tileTest.jsp)
<action 
      path="/Welcome" 
      forward="/pages/tileTest.jsp"/> 
<action 
      path="/customerAction" 
      type="xyz.actions.CustomerAction" 
      name="customerForm" 
      scope="request"> 

      <forward name="tile" path="/Welcome.do"></forward> 
      <forward name="customer" path="/pages/customer.jsp"></forward> 
     </action> 

接着,瓦片將被定義類似

<%@page language="java" pageEncoding="shift-jis"%> 
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> 
<%@ taglib uri="/tags/struts-html" prefix="html" %> 
<%@ taglib uri="/tags/struts-logic" prefix="logic" %> 
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> 
<logic:notEmpty name="module"> 
<logic:equal name="module" value="module1"> 
<tiles:insert definition="outputPage" flush="true" /> 
</logic:equal> 
</logic:notEmpty> 

<logic:notEmpty name="module"> 
<logic:equal name="module" value="module2"> 
<tiles:insert definition="outputPage2" flush="true" /> 
</logic:equal> 
</logic:notEmpty> 

<logic:empty name="module"> 
<tiles:insert definition="outputPage" flush="true" /> 
</logic:empty> 
+1

謝謝了。但是,由於我有兩個模塊(後來有兩個tiles-def.xml),當我從一個模塊切換到另一個模塊時,我需要提供一個'prefix'屬性。現在在新模塊的struts-config.xml中,所有動作映射都與我提供的前綴相關,因此它從前綴目錄中獲取JSP。如何強制它切換時不附加前綴?不知道我是否很好地解釋了我的問題。我可能應該爲此創建一個新問題。 – Urban

+1

我不知道,但如果你能在操作檢查前綴和根據,如果您爲JSP動態加載的瓷磚(如在答案中描述)的屬性,可以解決你的問題。不過,我想,你必須只有一個磚,def.xml – Naved

+0

嗯,技術上講,這個動態變化的瓷磚,所以我會接受這個答案。但是,我仍然在強迫他們引用同一組JSP的問題上存在一些問題。 – Urban