2016-06-16 3 views
2
TableQuery tq1 = new TableQuery("employee", connectionPool); 
    tq1.setVersionColumn("VERSION"); 
    employeeContainer = new SQLContainer(tq1); 
    employeeTable = new Table(); 
    employeeTable.setContainerDataSource(employeeContainer); 
    employeeTable.setVisibleColumns(new Object[]{ 
     "firstname", "lastname", "address"}); 
    employeeTable.setSelectable(true); 
    employeeTable.setImmediate(true); 

해당 예제에서 Vaadin의 SQLContainer-Addon을 사용하고 있습니다. 다음 코드를 사용하여 모든 셀을 편집 가능으로 설정할 수 있습니다.데이터 원본이 SQLContainer 일 때 단 하나의 열만 편집하는 방법

employeeTable.setEditable(true); 

하지만 하나의 열만 편집 가능하게하고 싶습니다. 주소는 편집 할 수있는 유일한 열이어야합니다.

답변

2

열을 편집 가능하게 만드는 데 실제로 사용하지 않았지만 사용자 정의 ColumnGenerator을 사용하여 편집 할 수없는 테이블에 TextField을 반환 할 수 있다고 생각합니다. TextField의 모델을 기본 컨테이너에 연결하면 두 방향으로 서로 업데이트 할 수도 있습니다.

myTable.addGeneratedColumn("address", new Table.ColumnGenerator() { 
    public Component generateCell(Table table, Object itemId, Object columnId) { 
     BeanItem<MyBean> item = myContainer.getItem(itemId); 
     Property<String> address = item.getItemProperty("address"); 
     TextField tf = new TextField(); 
     tf.setPropertyDataSource(address); 
     return tf; 
    } 
} 

주 (코드 아래에 테스트하지) :이 컨테이너 모델을 업데이트 할 수있는 동안, 나는 SQLContainer에 익숙하지 않다으로이 효과적으로 DB에 변경 사항을 커밋 것을 확실하지 않다.

관련 문제