【问题标题】:struts2 Pass URL to Actionstruts2 将 URL 传递给操作
【发布时间】:2012-09-03 09:40:12
【问题描述】:

我阅读了wildcard mappings 上的struts 手册,并决定自己测试一些示例。我有一个动作指向:

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

这使我可以走到/person 之外的任何地方,并尽我所能查看view.jsp。所以我现在要做的是转到/person/jack/black 然后我希望PersonActionBean 类中的getPerson 方法获取URL 字段jackblack 并在我的数据库中按名称和surname 然后填充将在view.jsp 上使用的对象

我关心的不是搜索功能,而是从方法 getPerson 检索 URL 中的字段。如何从 URL 中检索 jackblack 并在我的 getPerson 方法中使用它?

我正在使用 struts 2.1.8.1

【问题讨论】:

  • 你是如何将值传递给你的动作类的?或字段的名称,因为您需要将值作为键值对传递给服务器,其中键是属性的名称
  • 我不确定在这种情况下你的问题到底是什么???

标签: java struts2


【解决方案1】:

方法 1 - 使用 struts2-convention 插件

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,参数应该设置为param1 = jackparam2 = black

方法 2 - 不使用 struts2-convention 插件

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>

struts.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

【讨论】:

  • 我不明白你的问题,就像我说的,如果你有/persons/jack/blackparam1应该设置为jackparam2应该设置为black跨度>
  • 您好,请查看您的编辑Method 2,如果您不想使用约定插件,您怎么可能import org.apache.struts2.convention.annotation.Namespace;,您无法使用您的两个参数来处理 {0} 和 {1},如何struts2 可以做到这一点..
  • 我可以回滚我的答案并给你一些新的想法吗?有了你的编辑,我无法清楚地表达出来..
  • 抱歉,请使用{2} and {3}重试
  • 能否请您添加您的操作pacakge 信息,例如&lt;package name="etc" namespace="/" extends="struts-default"&gt;
【解决方案2】:

使用&lt;s:Property&gt;标签

为什么不选择属性标签。最好你通过属性标签发送这些名字。

<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">

我相信这会对你有所帮助...

【讨论】:

  • 这也没有解决所提出的问题。我会考虑删除你的两个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多