flowExecutionUrl在thymeleaf中使用th:action标签时附加两次

时间:2014-01-09 05:58:51

标签: spring-mvc spring-webflow thymeleaf

我正在使用带有Spring webflow和spring mvc的thymeleaf。我正在尝试获取应用程序URL flowExecutionUrl。但是当我在span中打印flowExecutionUrl时,我会得到类似

的网址
/SWF/loginflow.htm?execution=e2s1

但是当我在th:action中传递相同内容时,我的项目名称被附加了两次。喜欢这个

/SWF/SWF/loginflow.htm?execution=e2s1

下面是我的代码

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring3-3.dtd">
<html xmlns:th="http://www.thymeleaf.org">
  <body>
    <div>
      <div style="width: 1330px; height: 100px;">
        <div id="header" th:include="'/header'::headerfream"></div>
      </div>
      <div style="width: 1330px; height: 500px; position: absolute; top: 110px;">
        <form action = "#" th:action="@{${flowExecutionUrl}}" method="POST">
          <div>
            <table>
              <tr><td><span th:text="${flowExecutionUrl}"></span></td></tr>
              <tr>
            <td>
              <p>User Name</p>
            </td>
            <td>
                  <input type="text" name="name" id="name"  />
                </td>
              </tr>
              <tr>
            <td>
              <p>Password</p>
            </td>
            <td>
                  <input type="password" name="password" id ="password" />
                </td>
              </tr>
              <tr>
                <td>
              <input type="submit" value="submit"/>
                </td>
              </tr>
            </table>
          </div>
        </form>
      </div>
    </div>
  </body>
</html>

3 个答案:

答案 0 :(得分:0)

th:action使用@{...}语法重写URL。由于flowExecutionUrl/开头,因此相对于应用程序的上下文根重写URL。上下文路径/SWF前置于URL。

该范围不使用此@语法,因此只会写入flowExecutionUrl的原始值。

您应该从flowExecutionUrl中删除上下文路径,并让Thymeleaf使用@语法添加上下文路径,这样您的应用程序就不依赖于上下文路径。

来源:Thymeleaf Standard URL syntax

答案 1 :(得分:0)

谢谢汤姆的回答。我找到了解决方案

<form id="myForm" th:action="${flowExecutionUrl}"
       th:object="${userDetail}" method="post">
       <input type="hidden" name="_eventId" value="loginCredentialsEntered" />

我的行动将是

/SWF/loginflow.htm?execution=e3s2_eventId=loginCredentialsEntered

答案 2 :(得分:0)

找到了这个答案here

它非常适合webflow和thymeleaf。

使用服务器相对URL,如下所述:http://www.thymeleaf.org/doc/html/Using-Thymeleaf.html#link-urls

这看起来像是:

:href =“@ {'〜'+ $ {flowExecutionUrl}}”