2012-12-07 67 views
1

我有一種情況需要將我的導航欄放在每頁的頂部。所以我決定在每個頁面中包含一個新的JSP,其中有一個參數,指明用戶所在的活動選項卡是什麼。Struts2,使用<s:include>標記無法訪問參數。想在<s:if>標籤中使用它

我的實現如下。

dashboard.jsp

... 
<s:include value="../tab-set.jsp"> 
    <s:param name="tab_name" value="dashboard" /> 
</s:include> 
... 

製表set.jsp

<nav> 
    <ul> 
     <li <s:if test="param.tab_name == 'dashboard'">class="active"</s:if> > 
      <a href="dashboard">Dashboard</a> 
     </li> 
     <li <s:if test="param.tab_name == 'tab_2'">class="active"</s:if> > 
      <a href="suggestion">TAB 2</a> 
     </li> 
    </ul> 
</nav> 

的結果是,如果情況沒有在兩個標籤執行。

我也用不同的方法嘗試過,但它不工作像

<s:if test="#param.tab_name == 'dashboard'">

OR

<s:if test="#attr.tab_name == 'dashboard'">(發現在網絡上的一些地方)

OR我也嘗試過使用${param.tab_name}在頁面上打印tab_name值的值,但沒有任何發生。

但他們都沒有工作。

請幫助我或指導我能做些什麼。

謝謝。

回答

2

參數無法以這種方式訪問​​,因爲valuestack不是在渲染頁面內創建的。嘗試訪問它們,如請求參數${param.tab_name}

更新

<s:param>標籤的值應該是'dashboard',因爲它是一個字符串。

<s:include value="../tab-set.jsp"> 
    <s:param name="tab_name" value="'dashboard'" /> 
</s:include> 

在您的網頁包含得到tab_name使用${param.tab_name}符號並將其設置爲使用<s:set>標籤其他一些變量。

<s:set name="tabName"> 
    ${param.tab_name} 
</s:set> 
<s:if test="#tabName == 'dashboard'"> 
</s:if> 

這樣就不需要使用scriplets。

+0

對不起,無法理解。 U意味着我在Action類的'request'中設置了'tab_name'參數並在JSP上使用它 –

+0

好吧,我也嘗試了你告訴我的方式,但它仍然不工作...我只是打印出什麼值我從父母收到並打印空白字符串。我使用了'$ {param.tab_name}',它不打印任何東西。 –

+0

查看我的答案更新。 –

0

這是Struts2的關於如何使用包括標籤的文檔: documentation

+0

這不會起作用。包含文件中的參數必須以其他方式訪問。 –

+0

我做了一個快速測試,似乎工作 – Atropo

+0

你到底如何傳遞參數到包含文件?如果它像原來的文章那麼它不應該工作。 –

0

訣竅是缺少的部分:

<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %>

然後,不喜歡tihs:

tab-set。JSP

<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %> 
<nav> 
    <ul> 
     <li <s:if test="#attr.tab_name == 'dashboard'">class="active"</s:if> > 
      <a href="dashboard">Dashboard</a> 
     </li> 
     <li <s:if test="#attr.tab_name == 'tab_2'">class="active"</s:if> > 
      <a href="suggestion">TAB 2</a> 
     </li> 
    </ul> 
</nav> 

享受

+0

這是使用scriptlets,但如果''內的''值將被修復,也可以工作。 –

+0

不錯,未經測試,但信任+1: –

0

請更改dashboard.jsp文件與下面的代碼:

<s:include value="../tab-set.jsp"> 
    <s:param name="tab_name">dashboard</s:param> 
</s:include> 

如果申報的「值」屬性,Struts的裏面的「字符串」值2會忽略它。

+0

你只需要告訴它它是一個字符串。 –