Можно ли использовать объекты в качестве параметров функции в EL с JBoss EL resolver? - PullRequest
0 голосов
/ 21 апреля 2010

Это предложение содержится в Электронной документации JBoss EL resolver :

Важно полностью понять, как работает это расширение EL. Когда страница отображается, имена параметров сохраняются (например, hotel.id и user.username) и оцениваются (как выражения значений) при отправке страницы. Вы не можете передавать объекты в качестве параметров!

Но я использовал объекты в качестве параметров функции в своем проекте, прежде чем случайно прочитал эту подсказку, и это сработало! Как это возможно? Я боюсь, что теперь есть немного магии ...

РЕДАКТИРОВАТЬ: Обратите внимание, что я на самом деле использую полноценные объекты в качестве параметров без каких-либо проблем с нашим стеком платформы (MyFaces, Facelets, Тринидад, Spring, Webflow), и я спрашиваю, как это возможно. Например, я могу сделать это в шаблоне xhtml: "# {pageBean.formatAccount (account)}", где account - очень сложный класс. Я знаю, что согласно документации это не должно быть возможно, но это так. Стоит ли бояться каких-то трудностей в будущем? Вот в чем вопрос.

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Это означало сказать "нестандартные" объекты там. То есть не String, Integer и т. д., а полноценные объекты со значениями, такие как Javabeans и т. д.


Обновление : Теперь я вижу, что означает документация. Это означало, что эти значения на самом деле были переданы не как сложные объекты, а как простые ванильные строки, представляющие выражение значения. Буквально, "bean.hotel", "bean.user.address" и т. Д. Когда страница отправляется, эти строки оцениваются как выражения значений, и сложный объект, связанный с ним, будет извлечен из памяти JSF.

Важность здесь заключается в том, что вам необходимо сохранить тот же сложный объект в последующем запросе отправки формы, как это было при первоначальном отображении формы. Если бин является областью запроса, исходный объект будет потерян, когда ответ будет завершен. Вы хотели бы снова создать точно такой же сложный объект в конструкторе компонента во время последующего запроса. Другой способ исправить эту «проблему» - поместить компонент в более широкую область, такую ​​как область сеанса, область диалога Seam или область представления JSF 2.0.

Это также то, что пытается сказать следующее предложение документации:

Вы должны убедиться, что параметры доступны не только при отображении страницы, но и при ее отправке. Если аргументы не могут быть разрешены при отправке страницы, метод действия будет вызван с нулевыми аргументами!

1 голос
/ 08 августа 2010

это разрешено в фреймворке Seam. Один только JSF не позволяет этого. Это одно из преимуществ использования Seam. Вы можете передавать объекты в качестве параметров.

...