2014-10-10 3 views
1

Omniface의 Components #includeCompositeComponent으로 복합 구성 요소를 동적으로 만들 때 속성 값 (예 : 특성 myValue)을 전달하여 복합체의 사전 렌더링 이벤트에 사용할 수 있습니까?omnifaces 구성 요소 #includeComponent 구성 특성 값

<composite:interface> 
    <composite:attribute name="myValue" required="true" /> 
</composite:interface> 
<composite:implementation> 
    <!-- this works! --> 
    <h:outputText value="#{cc.attrs.myValue}" /> 
    <!-- this doesn't execute --> 
    <f:event id="eventId" 
      type="javax.faces.event.PreRenderComponentEvent" 
      listener="#{bean.someAction(cc.attrs.myValue)}" /> 
    <!-- stuff --> 
</composite:implementation> 

는 그러나, 나는 (#{cc.attrs.myValue} 통해) XHTML에 myValue에 액세스 할 수 있어요,하지만 (나는 myValue의 값을 지정 UIComponent#getAttributes을 사용) 사전 렌더링에 대한 사용할 수 없습니다.

편집 : 속성도 @PostConstruct (관리 속성을 통해)에서 사용할 수 있으면 가능합니다.

답변

1

확인 javadoc :

public static UIComponent includeCompositeComponent(UIComponent parent, String libraryName, String resourceName, String id)

...

결과 : 필요한 추가로 사용자 정의 설정하는 데 사용할 수 있습니다 경우 생성 된 복합 구성 요소, 속성 또는 값 표현식 그 위에.

그래서 그냥 돌아 UIComponent 인스턴스를 잡아와 EL 표현식을 설정하는 정적 값 또는 UIComponent#setValueExpression()을 넣어 UIComponent#getAttributes()를 사용합니다.

UIComponent composite = Components.includeCompositeComponent(parent, library, name, id); 
composite.getAttributes().put("myValue", myStaticValue); 
// Or: 
composite.setValueExpression("myValue", Components.createValueExpression("#{bean.myValue}", String.class)); 
// ... 
+0

'setValueExpression'은 composite 속성을 bean ('bean.myValue')의 값과 바인드합니까? 그럼에도 불구하고 그것을 시도해보십시오. 감사합니다 – nuno

+0

그것은'와 같은 효과를 가지고 있습니다 만,'getAttribute()'접근법은''그것은 단지 '문자열'이라고 가정합니다. – BalusC

+0

더 자세히 읽은 후에,'setValueExpression'은 다른 bean으로부터 값을 얻는다 고 생각합니다. 내가 맞습니까? – nuno

관련 문제