2011-08-28 2 views
1

로있는 명령의 탐색 액션 - 결과는이 같은 관리하기 어려운 코드를 수정하려고 :코딩 JSF는 코드

<a4j:commandButton action="dia_ok" actionListener="#{...}" ajaxSingle="true" .../> 

내가이 ManagedBean은에 결합하여 버튼을 수정하고 자바 코드에 대한 모든 속성을 교환, 그래서 병은이 :

<a4j:commandButton binding="#{...}"/> 

I 성공적으로 코딩 setAjaxSingle (참)과의 actionListener - 속성,하지만 난 코드의 행동 특성을 실패합니다.

내 질문은 : button.setActionExpression() 메서드는 String 대신 MethodExpression 인수 만 허용하는 동작 결과를 어떻게 지정할 수 있습니까?

+1

수정 사항이 개선 된 이유는 무엇입니까? (컴포넌트 바인딩에 관해서 가장 자주 듣는 충고는 모든 비용을 들이지 않고 피하는 것입니다 ...) – meriton

+0

애자일 프로그래밍의 목표 중 하나는 아키텍처 검토에 의한 코드식이 아닌가요? commandButton은 8-12 개의 속성을 더 사용합니다. imo unmanageamble입니다. –

답변

1

값이 "dia_ok"이고 반환 유형이 StringMethodExpression을 만들면됩니다. 표현이 반드시 "#{bean.action}" 또는 뭔가를 참조하지는 않습니다.

예.

private static MethodExpression createMethodExpression(String expression, Class<?> returnType) { 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    return facesContext.getApplication().getExpressionFactory().createMethodExpression(
     facesContext.getELContext(), expression, returnType, new Class[0]); 
} 
난 단지 당신이 모델로보기 이런 식으로 섞여있는대로 코드를 더 쉽게 관리 할 방법을 보려면 실패

button.setActionExpression(createMethodExpression("dia_ok", String.class)); 

. 아마도 당신은 좀 더 관리가 잘되도록 어트리뷰트가 어떻게 정렬되고 조직되어야하는지에 대한 몇 가지 일반적인 관습을 써야 할 필요가있을 것입니다. 예 : id을 먼저 입력 한 다음 value 등을 입력 한 다음이 규칙과 일치해야합니다.

+0

나는 mvc-pattern을 사용하지 않고 일반적인 CRUD 큐레이터 클래스를 작성했고 내 hibernate-entitybeans (트랜잭션이 오래 지속되는 최대 절전 모드 세션)은 jsf-selectitem을 상속합니다. 그것의 까다로운 프로토 타입과 모든 중요한 고전적인 oop 디자인을 던졌습니다. –

관련 문제