2014-09-10 1 views
0

Я пытаюсь установить свойство bean bean-компонента при использовании композитного компонента (бэк-компонент является составным attribute).Как установить свойство bean из составного атрибута?

Существует свойство bean (ex, finalDraft), которое я хочу условно заполнить атрибутом (условно, потому что атрибут не требуется).

Подложка боб:

class Bean ... { 
    String finalDraft; // getters+setters 

    @PostConstruct 
    void init() { 
     String draftAttr = (...) getAttributes("draft"); 
     if(draftAttr!=null) { 
      finalDraft = draftAttr; 
     } 
    } 
} 

Композитный:

<composite:interface> 
    <composite:attribute name="bean" required="true" ... /> 
    <composite:attribute name="draft" type="java.lang.String" /> 
</composite:interface> 

До сих пор я пытался с getAttributes("draft") в @PostConstruct из bean, но решает обнулить (примечания: вид-сфера) ,

Есть ли другой способ сделать это?

ответ

1

Просто не связывайте свой компонент с композитным компонентом. Передайте свойство непосредственно вместо:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:composite="http://java.sun.com/jsf/composite" 
    xmlns:h="http://java.sun.com/jsf/html"> 
    <h:body> 
     <composite:interface> 
      <composite:attribute name="showDraft" default="true" /> 
      <composite:attribute name="draft" /> 
     </composite:interface> 
     <composite:implementation> 
      <h:inputText value="#{cc.attrs.draft}" 
       rendered="#{cc.attrs.showDraft}" /> 
     </composite:implementation> 
    </h:body> 
</html> 

Тогда вы будете иметь возможность использовать его в своей главной странице либо:

<comp:draftInput value="#{bean.finalDraft}" /> 

или

<comp:draftInput showDraft="false" /> 

Я боюсь, что ты путают о бэкбоне здесь. Одна вещь заключается в том, что у вас есть в текущем @ViewScoped компонентах, а другой - составном компоненте. Компонент ничего не знает о управляемом компоненте текущего вида, он получает только параметры и отображает их. Это может быть один вид лица или может иметь класс в его спине, который знает только о составном и ничего о облаках.

+0

Благодарим за отзыв. В моем случае использования атрибут 'draft' не является' boolean', а 'String', который должен использоваться в текстовом компоненте (как и значение по умолчанию для компонента' inputText'). Значение 'input' привязано к свойству bean (' bean.finalText', который я решил опустить, потому что я просто хочу получить доступ к атрибуту 'draft' в бэк-компоненте). Моя проблема заключалась в том, что в случае существующего проекта я не смог установить finalText с текстом проекта – nuno

+0

. Я уже решил его, вызвав 'f: event' и явно вызвав требуемый наборщик (и соответствующий аргумент, который в моем case - 'draft') – nuno

+0

@nuno, все еще не понимаю, почему вы заполняете свойство bean с составным атрибутом при его загрузке. У вас уже нет этого атрибута в вашем компоненте? –

 Смежные вопросы

  • Нет связанных вопросов^_^