2012-07-03 4 views
1

중첩 및 색인 된 속성 설정을 위해 BeanUtils.setProperty과 관련이있을 수있는 대체 방법으로 JSP/JSF 표현식 언어 (EL)를 명시 적으로 호출 할 수있는 방법이 있습니까?BeanUtils.setProperty를 JSP/JSF EL (표현식 언어)로 바꾸기

예를 들어 BeanUtils.setProperty(object, "foo.bar", "value")으로 전화하면 리플렉션을 통해 object.getFoo().setBar("value")이 호출됩니다.

EL에서 대신 할 수있는 방법이 있습니까?

내가하려는 것은 <h:inputText value="#{object.foo.bar}">과 유사하지만 UI 대신 "object.foo.bar"속성식이 동적 일 수있는 백엔드 방식과 비슷합니다. 나는 BeanUtils가 작동하지만 다소 고풍 스럽다고 느낀다.

답변

0

이 경우 ValueExpression#setValue()을 사용할 수 있습니다.

FacesContext context = FacesContext.getCurrentInstance(); 
ELContext elContext = context.getELContext(); 
ValueExpression expression = context.getApplication().getExpressionFactory() 
    .createValueExpression(elContext, "#{object.foo.bar}", String.class); 
expression.setValue(elContext, "value"); 
+0

그 예에서 'object'는 JSF 관리 Bean 또는 CDI 오브젝트 여야합니까? 명시 적으로 루트 객체를 지정할 수있는 방법이 있습니까? – wrschneider

관련 문제