2012-09-03 44 views
0

我閱讀了wildcard mappings上的struts手冊,並決定自己測試一些示例。我有一個指向一個動作:struts2將U​​RL傳遞到Action

<action name="**" method="getPerson" class="PersonActionBean"> 
     <result>/person/view.jsp</result> 
</action> 

這讓我去任何地方,過去/person看看view.jsp據我可以理解。所以我現在想要做的是去/person/jack/black然後我想要在PersonActionBeangetPerson方法得到的URL字段jackblack並在我的數據庫搜索名稱和姓氏,然後填充將使用的對象view.jsp

我的問題不在於搜索功能,而在於從方法getPerson中檢索URL中的字段。我如何從URL中檢索jackblack,並在我的getPerson方法中使用它?

我使用struts 2.1.8.1

+0

你如何值傳遞給你的動作類?或什麼名稱的字段,因爲你需要將價值傳遞給服務器作爲鍵值對,其中鍵是屬性的名稱 –

+0

我不知道在這種情況下究竟是什麼問題? –

回答

2

方法1 - 使用struts2的會展插件

struts.xml的

<constant name="struts.patternMatcher" value="namedVariable"/> 

PersonAction。 java的

import org.apache.struts2.convention.annotation.Namespace; 
    ... 
    @Namespace{"/persons/{param1}/{param2}"); 
    public class PersonActionBean exends ActionSupport { 
     private String param1; 
     private String param2; 
     // getter and setter 
    } 

如果調用persons/jack/black的PARAMS應該設置爲param1 = jackparam2 = black

方法2 - 沒有struts2的會展插件

PersonAction.java

public class PersonActionBean exends ActionSupport { 
    private String param1; 
    private String param2; 
    // getter and setter 
} 

person.xml

<package name="person" namespace="/person" extends="website"> 
    <action name="*/*" method="getPerson" class="PersonActionBean"> 
      <param name="param1">{1}</param> 
      <param name="param2">{2}</param> 
      <result>/person/view.jsp</result> 
    </action> 
</package> 

支柱。XML

<package name="website" namespace="/" extends="struts-default, json-default"> 
    ... 
    <constant name="struts.enable.SlashesInActionNames" value="true"/> 
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 
    ... 
</package> 

參考

退房Advanced Wildcard

+0

我不明白你的問題,就像我說的,如果你有'/ persons/jack/black','param1'應該設置爲'jack','param2'應該設置爲'black' – Jaiwo99

+0

嗨,你編輯'方法2',如果你不想使用約定插件,你怎麼可能'import org.apache.struts2.convention.annotation.Namespace;',你不能用你的兩個參數來解決{0}和{1} ,struts2怎麼可能做到這一點.. – Jaiwo99

+0

我可以回滾我的答案,並給你一些新的想法?你的編輯我不能清楚地表達出來.. – Jaiwo99

-1

使用<s:Property>標籤

爲什麼不出去屬性標記。你最好通過財產標籤發送這些名字。

<s:url action="PersonActionBean" var="urlPersonActionBean" > 
    <s:param name="name1">no</s:param> 
    <s:param name="name2">no</s:param> 
</s:url> 

<a href="<s:property value="#urlPersonActionBean"/>" target="content"> 

我相信這將幫助你......

+0

這也不解決被問的問題。我會考慮刪除你的答案。 –