2012-04-10 3 views
1

sortBy 특성을 프라임 스 테이블 데이터 테이블 Column에 프로그래밍 방식으로 넣으려고합니다. DataTable에서 상속 받았으며 사용자 지정 getColumns() 호출을 사용하여 내 자신의 열을 만들었습니다.primefaces에 프로그래밍 방식으로 sortBy 특성 추가 DataTable 열

불행하게도이 방법은 아직이에있는 문맥을 알고하지 않기 때문에, 컬럼에 sortBy 속성을 삽입 할 깨끗한 방법은없는 것 같다.

public List<Column> getColumns() { 
    if (columns == null) { 
     columns = new ArrayList<Column>(); 
     String[] columnStrings = getShowColumns().split(","); 
     for (String columnString : columnStrings) { 
      Column column = getColumnByType(columnString.trim()); 
      if (column != null) { 
       //here I have to add the sortBy Expression somehow, 
       //but there is no context to construct it from 
       //column.setSortBy(ValueExpression) 
       columns.add(column); 
      } 
     } 
    } 
    return columns; 
} 

그것은 나에게 분명한 것, 즉 I 뭔가 빠졌지 만, 나는 잃어 버렸어. Column은 다른 곳의 ValueExpression으로 채워진 것 같습니다. 그러나 어디에서 찾을 수없는 ...

디버거를 사용하여 모든 코드를 살펴 보았습니다.하지만 ValueExpression이 언제 사용되는지 알 수 없습니다. 원래 구현에서 생성되었습니다. 어떤 힌트도 감사하겠습니다.

답변

4

ValueExpressionsortBy에는 열이 sortBy으로 지정되어 있지 않으면 아무 데나 저장되지 않습니다. 정렬이 가능한 각 열에 대해 ValueExpression을 직접 만들어야합니다. 당신은 유형과 값 모르는 경우 그렇지

Column column = getColumnByType(columnString.trim()); 
FacesContext facesContext = FacesContext.getCurrentInstance(); 
ELContext elContext = facesContext.getELContext(); 
ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory(); 
ValueExpression valueExpresion = elFactory.createValueExpression(elContext, column.getValue(), column.getType()); 

: 당신이 시도 할 수 있도록 내가 가정

당신은 열 유형과 값을 알고

String valueExprs = "#{data.street}"; // for example 
    ... 
    Column column = getColumnByType(columnString.trim()); 
    ... 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ELContext elContext = facesContext.getELContext(); 
    ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory(); 
    ValueExpression valueExpression = elFactory.createValueExpression(elContext, valueExprs, String.class); 

을 그리고 지금 당신은 설정할 수 있습니다 sortBy :

column.setValueExpression("sortBy", valueExpression); 

column.setValueExpression 대신 column.setSortBy의를 사용하여 공지 사항 - 그것은 원인 적은 문제와 대부분의 시간 동안 일합니다.

희망이있었습니다.

+0

정말 고마워요. 나는 그것이 작동하도록 싱글 톤 컨텍스트를 끌어 올 수 있다는 것을 몰랐다. 나는 여전히 컨텍스트가 레퍼런스에 의해 전달되는시기와 이유를 얻지 못한다. 그러나 그것은 완전히 다른 질문이다. 다시 한 번 감사드립니다! – devsnd

+0

당신은 환영합니다. bean, phaseListeners 등과 같은 모든 jsf 관련 "객체"에서 컨텍스트를 가져올 수 있지만, 실제로 경험이 많은 사용자 및 BalusC와 같은 전문가로부터 자세한 대답을 얻으려면 별도의 질문을해야합니다. – Fallup

관련 문제