2017-07-29 87 views
0

我有一個表單來修改一個對象。該對象可以在兩個頁面中使用,具有相同的值。條件th:春季行動

我想有兩個按鈕,並取決於按鈕submited發送到一個或另一個頁面。

現在我的代碼是這樣的:

<!-- Make my action dinamically depending on button submitted --> 
    <form action="#" th:action="@{/action}" th:object="${myObject}" 
      method="post"> 
      <input type="submit" name="new" value="new" /> 
      <input type="submit" name="edit" value="edit" /> 
    </form> 

日:動作要動態

我創建方法在我的控制器,以便根據不同的活動,我可以對付它。

@RequestMapping(value = { "/new", "/edit" }, method = RequestMethod.POST) 
     public String handlePost(@RequestParam String action, @ModelAttribute MyObject myObject) { 


      if (action.equals("new")) { 
       //Make some stuff 
       return "new"; 

      } else if (action.equals("edit")) { 
      //Make some stuff 
       return "edit"; 
      } 

      return "index"; 

     } 

在thymeleaf文檔中,我看到類似的東西,但我無法處理它。

更新1

我的目標是在我的網頁呈現N列的矩陣。如果一切正常,我編輯它的值,但我可以使用新的操作添加新列。

我想要兩個按鈕,並取決於他們哪些去新的或去編輯。 該對象始終存在。

有什麼建議嗎?

感謝

回答

0

我猜你想要發佈到/new,當你沒有一個現有的對象,並/edit當你這樣做。

你的行動應該是這樣的

th:action="${myObject != null ? '/edit' : '/new'}

這不是最乾淨的代碼,自從你在你的模板中插入邏輯,你可能會是通過設置動作值作爲模型視圖更好在呈現表單的控制器中的屬性,但我認爲它可能以這種方式工作。

此外,你也應該考慮在兩種不同的方法,一個映射到/new和一個映射到/edit分裂你的表單處理程序,可能分解出任何共同的代碼,而不是檢查action值。

+0

但將ñ不會導致應該包含上下文路徑的URL。 –

+0

如果您需要使用'@ {/ action}'來保留上下文路徑,那麼您唯一的解決方案就是在呈現窗體的控制器中填充操作變量。 – Raibaz

+0

我認爲這應該工作:'th:action =「@ {myObject!= null?'/ edit':'/ new'}' –

1

我認爲使用javascript做這件事會容易一些。

let form = document.forms[0]; // or replace with an identifier for the form 
 

 

 
Array.from(form.getElementsByTagName('input')).filter(e => e.type === 'submit').forEach(btn => 
 
    btn.addEventListener('click', e => { 
 
    e.preventDefault(); 
 
    form.setAttribute('action', '/' + e.target.name); 
 
    console.log(form.getAttribute('action')); 
 
    form.submit(); 
 
    }) 
 
);
<form action="#" th:action="@{/action}" th:object="${myObject}" 
 
      method="post"> 
 
      <input type="submit" name="new" value="new" /> 
 
      <input type="submit" name="edit" value="edit" /> 
 
    </form>

0

我這樣做的方式如下:

在控制器:

modelAndView.addObject("action", "Save"); 

在模板:

th:action="${action} == 'Save' ? @{/manageCategory/addEditCategory/addCategory} : @{/manageCategory/addEditCategory/editCategory}" th:object="${addCategoryDTO}" method="POST" 

<button th:text="${action == 'Edit'} ? 'Edit' : 'Save'" id="btnsubmit" class="btn blue okMark" type="submit" ></button>