Пользовательские теги лифта не работают - PullRequest
0 голосов
/ 18 декабря 2011

Следующие типы тегов в Lift не работают для меня:

<lift:snippet type="MyClass:render" />
<lift:MyClass.render/>
<lift:MyClass/>

Использование этих тегов приводит к ошибке Class Not Found. Если я попытаюсь вызвать класс, используя

<div class=lift:myclass.mymethod />

это может работать. Или, если я это называю, используя теги span. Например, пример Hello World в Pollak's Simply Lift работает для меня, успешно отображая метод Howdy со следующим кодом:

<span class="lift:helloWorld.howdy">
      Welcome to your Lift app at <span id="time">Time goes here</span>
</span>

В настоящее время моя проблема связана с попыткой реализовать пример Исследование Lift (он же The Lift Book ) в главе 13.1. Я скачал OpenID4Java, используя sbt, а также библиотеку lift-openid. Этот пример можно найти по адресу http://exploring.liftweb.net/master/index-13.html.. Я реализовал изменение в классе Boot и создал класс OpenID и класс SimpleOpenIDVendor. Но создание HTML-файла, содержащего

 <lift:OpenID.form>
  <openId:renderForm/>
 </lift:OpenID.form>

приводит к отображению в браузере следующей ошибки:

Error processing snippet: openid.form
Reason: Class Not Found
XML causing this error:
<lift:openid.form xmlns="http://www.w3.org/1999/xhtml">
<openid:renderform>
</openid:renderform></lift:openid.form>

Класс OpenID был помещен в пакет, который начинается с кода пакета, который неявно находится в Lift. Он включен в файл Boot.scala со строкой

LiftRules.addToPackages("code")

Итак, я в растерянности. Есть идеи?

Обратите внимание, что другие метки лифта, такие как lift: bind-at и lift: Surround и т.п., работают нормально.

1 Ответ

2 голосов
/ 19 декабря 2011

Как написал Дэйв под моим первоначальным комментарием, проблема заключалась в парсере HTML5. Lift чувствителен к регистру и не может найти класс с переменным регистром. Поскольку синтаксический анализатор HTML5 автоматически делает теги строчными, вы больше не можете использовать пользовательские теги подъема. Вместо этого вы должны использовать что-то вроде

<div class="Lift:MyClass.render"></div>

Обратите внимание, что вы НЕ МОЖЕТЕ иметь

<div class="Lift:MyClass.render" />

, поскольку HTML5 явно не поддерживает такие теги.

Поэтому моя проблема OpenID4Java решается с помощью:

<div class="lift:OpenID.renderForm">         
</div>

Почему мне не нужно использовать openid.form, пока неизвестно. Возможно, я его немного отключил, но я подтвердил, что он перейдет на страницу входа в openid, если я добавлю ссылку openid, поэтому она действительно работает.

Источники:

...