2015-08-24 5 views
-1

У меня есть форму, которая должна печатать вопросы динамически. Foo имеет объект Field и объект Field Definition. Я хочу, чтобы Field имел свой fieldDefinition, присвоенный формой. Все за кулисами отлично работает.Назначение объекта в форме

Приведенный ниже код работает с назначением строк и длинной строки в других сценариях.

Вот линия, которая вызывает тревогу:

<input th:type="hidden" th:field="*{fields[__${iterationStatus.index}__].fieldDefinition}" th:value="${fooViewModel.fields[__${iterationStatus.index}__].fieldDefinition}"/> 

Это то, что он выглядит, когда он делает в HTML:

<input type="hidden" value="[email protected]" id="fields0.fieldDefinition" name="fields[0].fieldDefinition"> 

Когда я отправить форму, никаких действий контроллера не вызываются, и приложение просто перенаправляется на страницу с ошибкой.

Если невозможно выполнить задание таким образом, предложите другие методы. Единственный способ, которым я придумал, состоит в том, чтобы Foo использовал FieldDefinitionService для выполнения задания после передачи идентификатора. Я не имею этого класса домена, чтобы иметь доступ к другому объекту домена Service.

Благодаря

+0

типа входного = скрытый может содержать только значение String. [email protected] - значение вашего fieldDefinition, представленного как String (т. е. значение fieldDefinition.toString()). Я не понимаю, что вы хотите сделать, поэтому я не могу больше помочь вам, но я думаю, вы могли бы использовать что-то вроде th: field = "* {fields [__ $ {iterationStatus.index} __]. FieldDefinition.id } « –

+0

Я предполагаю, что есть' th: each' где-то и тег 'form'. Можете ли вы разместить весь фрагмент, пожалуйста? –

+0

Спасибо @PedroAffonso, вы можете порекомендовать модель JPA для этого? Я почти чувствую, что вам придется создать дополнительный метод обслуживания, чтобы выровнять 'fieldDefinintionId' с' полем' каждый раз, когда вы его вызываете. В этот момент имеет смысл копировать attrs из 'fieldDefinition' в' field' для каждого экземпляра. Как вы думаете? –

ответ

-1

Простой пример: когда вам нужно перебирать форму внутри элемента, который имеет атрибут th:each, вы можете использовать следующую структуру (до сих пор, это единственный способ, который работает для меня).

<tr th:each="rank, stat : ${ranks}"> 
    <td th:text="${rank.name}">This is static</td> 
    <td th:text="${rank.description}">This is static</td> 
    <td> 
     <form th:action="@{/user/ranks/delete}" method="post"> 
      <input type="hidden" id="id" name="id" th:value="${rank.id}"></input> 
      <button class="btn btn-danger" type="submit"> 
       <span>Delete</span> 
      </button> 
     </form> 
    </td> 
</tr> 

Здесь ranks список лиц, которые должны быть отображены на table и для каждого объекта, есть кнопка удаления, связанная с формой.

Метод контроллера должен быть похож на следующий фрагмент, параметр availabled с именем id:

@RequestMapping(path = "/delete", method = RequestMethod.POST) 
public View deleteRank(Model model, @RequestParam(name = "id") String rankId, 
     @ModelAttribute("user") User user) 
{ 
    Long id = Long.parseLong(rankId); 

    // delete ... 

    RedirectView redirectView = new RedirectView("/user/ranks"); 
    return redirectView; 
} 
+0

Боюсь, это не вопрос, на который я пытаюсь ответить. Однако, спасибо. –

Смежные вопросы