Play framework: передача параметра в пользовательский тег

#java #tags #playframework

#java #Теги #playframework

Вопрос:

Я хочу передать имя поля в качестве параметра в пользовательскую игру! тег фреймворка:

   #{ifError ${_field}}
    <ul class="err">
    #{errors ${_field}}
      <li>${error}</li>
    #{/errors}
    </ul>
  #{/ifError}
  

Но все, что я получаю, это исключение:

 Template execution error (In /app/views/tags/errorList.html around line 1)
Execution error occured in template /app/views/tags/errorList.html. Exception raised was MissingMethodException : No signature of method: Template_1008.$() is applicable for argument types: (Template_1008$_run_closure1_closure2) values: [Template_1008$_run_closure1_closure2@2da75e1b] Possible solutions: _(java.lang.String), is(java.lang.Object), run(), run(), any(), get(java.lang.String).

play.exceptions.TemplateExecutionException: No signature of method: Template_1008.$() is applicable for argument types: (Template_1008$_run_closure1_closure2) values: [Template_1008$_run_closure1_closure2@2da75e1b]
  

Как я могу передать параметр своему тегу?

Решение

Я немного изменил решение «Codemwnci» и в итоге получил следующий код шаблона:

 #{ifError _arg}
  <ul class="err">
  #{errors _arg}
    <li>${error}</li>
  #{/errors}
  </ul>
#{/ifError}
  

Этот шаблон вызывается следующим образом #{errorList 'document.title' /}

Ответ №1:

Поскольку вы уже находитесь внутри фрагмента кода Groovy, используя синтаксис тега #{..} , вам не нужно использовать синтаксис выражения (т. Е. Вам не нужно использовать ${..} синтаксис).

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

Для вас должно сработать следующее

 #{ifError _field}
  <ul class="err">
    <li>#{error _field /}</li>
  </ul>
#{/ifError}
  

Комментарии:

1. Спасибо, это работает! Важно передавать именованный параметр тегу до тех пор, пока имя по умолчанию для одного параметра arg не используется. Ошибки Btw имеют необязательный параметр .

2. так и есть. это полезно знать!