2017-10-10 14 views
0

예가 작동합니다. 문맥이 p:dataTable이 아닌 getData이라면 null을 반환합니다. 메서드가 null을 반환하는 경우에는 Values.iterateOverDatatableValues을 참조하십시오. 내 문맥에서 row을 어떻게 정의 할 수 있습니까? 값을 반복 할 수있는 함수가 datager 일 수 있으므로 #{row}이 정의됩니까?일부 값에 대해 EL-Context를 확장하십시오. <code>#{row}</code>이 <code>p:dataTable</code>에 정의되어 있기 때문에 xhtml의 예가 작동합니다.

자바 : #{row}Test.getData()에 정의

@Named 
@SessionScoped 
class Test { 
    public Object getData() { 
    return Faces.evaluateExpressionGet("#{row.someProperty}"); //The String "#{row.someProperty}" comes from a collection. 
    } 
} 

XHTML :

<p:dataTable value="#{bean.values}" var="row"> 

    <p:column> 
     <h:outputText value="#{test.data}" /> 
    </p:column> 
</p:dataTable> 

자바는 #{row}는 정의되지 않는다 :

class Values { 
    @Inject 
    Test test; 

    public void iterateOverDatatableValues(){ 
    DataTable dt = Components.findComponent("datatableId"); 
    for (Object o : dt.getValues()){ 
     test.getData(); // <---- NULL because #{row} is not defined. 
    } 
    } 
} 
+0

_ "는 아마도 값을 반복하는 데이터 테이블 몇 가지 기능이?"_ 그게 무엇 당신은 내가 저장할 이국적인 방법 – Kukeltje

+0

이런 종류의 일을 달성하기 위해 노력하고 있습니다 ... 쇼케이스에서하는 것입니다 EL-Expressions는 일부 외부 테이블에서'# {row.data} '와 (과) 비슷합니다. – Tony

+0

다음 질문 : 왜? – Kukeltje

답변

0

용액을 expressionFactory()를 사용 하였다 createValueExperssion한다. 방법.

private void setRowEL(Object o) { 
    ELContext elContext = Faces.getELContext(); 
    ExpressionFactory expressionFactory = Faces.getApplication().getExpressionFactory(); 
    ValueExpression aliasValueExpression = expressionFactory.createValueExpression(elContext, "#{row}", MyValue.class); 
    aliasValueExpression.setValue(elContext, o); 
}