вторник, 23 октября 2007 г.

locale

Теперь так:
> echo $LANG
en_GB.UTF-8

Избавился еще от одной олдскульной вещи: локали в виде ru_RU.koi8-r. Пока пришлось заменить rxvt на rxvt-unicode-lite. Остальное вроде слега поднастроить и допилить. Centericq глючит (позицианирует курсор как будт-то вместо одного символа вставляются два (считает не символы а байты сволочь), но в пределах нормы, тем более, что в планах избавление от centericq. Рано или поздно это должно было случится.

пятница, 19 октября 2007 г.

JSF & Facelets

В чем была суть проблемы:
Когда в facelet'ах мы создаем template или tag на основе template'а, мы можем передавать в него параметры. Например custom tag с именем link имеет параметр myCoolAction, а тушка определения тэга выглядит банально:
<h:commandLink action="#{myCoolAction}">
Мы пользуемся тэгом:
<customNs:link myCoolAction="hello">
И ожидаем, что это равносильно <h:commandLink action="hello">.
Но не тут-то было. Facelet'ы передает аргументы внутрь template'а заворачивая их в ValueExpression. Тоесть у action аттрибута значение на самом деле оказывается не типа String, а типа ValueExpression. Умный commandLink это просекает и решает, что раз это не string, то это биндинг! А как же? Что это может быть еще? И обламывается. Ибо после eval'а на ValueExpression он таки получает String, а не MethodExpression - как нужно для биндинга к методу. Вот такая вот фигня.

Мне удалось это вылечить написав на java другой custom tag, который берет ValueExpression и превращает его в MethodExpression возвращающий оригинальный ValueExpression. Костыль.

На самом деле, это не самое страшное в faceletах. Хотя признаюсь, без facelet'ов JSF хочется об стену убить.