2013-08-19 2 views
1

Я использую Richfaces 4.3.3.Почему переменные JSF в компонентах Richfaces не решаются?

У меня сложный виджет. Я передаю параметр/атрибут, который правильно печатает внутри этого виджета. Если я хочу добавить эту переменную (целое число) в <rich:popupPanel>, значение разрешается до 0 (значение по умолчанию для целых чисел).

<rich:popupPanel id="popupEditor_#{cc.attrs.pubId}"> 
    #{cc.attrs.pubId} 
</rich:popupPanel> 

Достаточно интересный, значение внутри тега, исправляется правильно. Это проблема фазового слушателя? Если да, то как мне решить эту проблему - используйте компоненты богатых лиц?

+0

Вы пробовали поместить его внутри ''? (Или , то, что должно содержать текст) – Makhiel

+0

В будущем перед тем, как вы сделаете несколько сильных утверждений, указывающих на конкретного подозреваемого, основанного на поспешных сделанных наблюдениях («это не работает в компонентах RichFaces»), пожалуйста, исключите его сначала из являясь причиной, заменив '' напр. '<Ч: panelGroup>'. Заявление в вашем названии совершенно неверно. – BalusC

ответ

1

Прежде всего, внимательно прочитайте: JSTL in JSF2 Facelets... makes sense?

Сокращенная, EL выражения в id атрибуты вычисляются во время вид сборки. В вашем конкретном случае, основываясь на симптомах, #{cc.attrs.pubId}, по-видимому, доступен только во время просмотра рендеринга, например, потому что он определен var итерационного компонента JSF UI или потому, что он определен как свойство bean, которое устанавливается после сборки вида время и т. д.

Вам нужно обратиться к другому решению. Я не могу сказать это подробно, поскольку вы ничего не сказали о конкретном функциональном требовании, для которого вы считали, что это решение. Но, к точке, у Вас есть 2 варианта:

  1. Убедитесь, что любые переменные EL в idbinding) атрибута доступны во время вид сборки. Например, используйте <c:forEach> вместо <ui:repeat>.

  2. Поместите его на простой элемент HTML. Он оценивается во время просмотра рендеринга.

    <rich:popupPanel id="popupEditor"> 
        <div id="#{cc.attrs.pubId}"> 
         ... 
        </div> 
    </rich:popupPanel> 
    

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

<rich:popupPanel id="popupEditor"> 
    ... 
</rich:popupPanel> 

JSF уже заботится о ней автоматически, как составные компоненты по своей сути простираться от NamingContainer. Вам просто нужно указать <my:composite> сам фиксированный идентификатор.

+0

Еще раз, вы принимаете решение. Этот фрагмент кода является составным, который повторяется с помощью ui: repeat. Итак, как вы сказали, идентификатор недоступен при просмотре времени просмотра. Спасибо, что просветили эту ситуацию. – feder

+0

Добро пожаловать. – BalusC