【问题标题】:How to call custome URL action from Form action?如何从表单操作调用自定义 URL 操作?
【发布时间】:2014-07-12 06:04:06
【问题描述】:

我关注this post 并创建了一个自定义 URL 应用程序。动作被调用,但 url 显示会话 id 像

http://localhost:8080/CustomURL%7Busername%7D.action;jsessionid=9C1FB3EB633209C18625BBB40EA61000

我只想http://localhost:8080/CustomURL/rajesh

见我的struts.xml

<struts>
<constant name="struts.mapper.alwaysSelectFullNamespace"
    value="false" />
<constant name="struts.enable.SlashesInActionNames" value="true" />
<constant name="struts.patternMatcher" value="namedVariable" />
<package name="default" namespace="/" extends="struts-default">
    <action name="">
        <result name="success">home.jsp</result>
    </action>

    <action name="{username}" class="com.rajesh.struts2.CustomURL"
        method="customUrl">
        <result name="success">welcome.jsp</result>
    </action>

</package>

查看我的 JSP 页面:

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts 2 Custom URL</title>
</head>
<body>
    <h1>Struts 2 Custom URL</h1>
    <h3>Enter your name below</h3>
    <s:form action="{username}">
        <s:textfield name="username" />
        <s:submit />
    </s:form>
</body>
</html>

参见下面的 java 文件:

public class CustomURL extends ActionSupport {

    private String username;

    public String getUsername() {
        System.out.println("Getter");
        return username;
    }

    public void setUsername(String username) {
        System.out.println("Setter");
        this.username = username;
    }

    private static final long serialVersionUID = -4337790298641431230L;

    public String customUrl() {
        return SUCCESS;
    }
}

【问题讨论】:

    标签: java jsp struts2 wildcard-mapping


    【解决方案1】:

    如果您不希望用户认为他们的名字有扩展名,首先您应该去掉操作扩展名。

    <constant name="struts.action.extension" value=",,action"/> 
    

    接下来的模式匹配器应该是regex

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

    动作映射

    <action name="/CustomURL/{username}" class="com.rajesh.struts2.CustomURL" method="customUrl">
        <result name="success">welcome.jsp</result>
    </action>
    

    在JSP 中你不需要使用form 标签,而是锚标签。并使用已知名称。

    <a href="http://localhost:8080/CustomURL/rajesh">Click my name</a>
    

    【讨论】:

    • @Roman C 先生,我有疑问。当我使用regex 时,它不起作用。当我使用namedVariable 时,它正在工作。为什么会这样?
    • @Paresh3489227 regex 模式匹配器可能在您使用的 struts 版本中不可用。
    【解决方案2】:

    试试吧..

     public String customUrl() {
    
       HttpServletRequest request=(HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
       String url="http://"+request.getServerName()+":"+request.getServerPort()+""+request.getContextPath()+"/"+request.getParameter("username");
    
       logger.info(" Current url : "+url);  //check it here
    
        return SUCCESS;
     }
    

    【讨论】:

      【解决方案3】:

      在 {username} 之前尝试$$ 代表Freemarker

      <action name="{username}" class="com.rajesh.struts2.CustomURL" 
       method="customUrl">
      

      Freemarker Tutorial

      How to use OGNL Expression Example link

      <s:property value="username"/> for calling username on welcome page.
      

      它可能会帮助你得到你的答案。

      【讨论】:

      • 如果仍然无法正常工作,请在您的问题中发布您的操作文件意味着您的 java 文件。
      • 它不工作。我在问题中添加了java文件
      • 试试这个
      • 我试过它不适用于
        标签。因为它没有从文本框中动态获取用户名。和前进。在您的域名/任何名称的 url 中没有表单标签,它将起作用,您将获得成功页面。 @Rajesh
      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多