2014-05-14 3 views
0

테이블에 구성 요소를 추가하는 방법을 찾고 있습니다. 내 테이블에서 JPAContainer를 데이터 소스로 사용하고 있습니다. addContainerProperty를 사용하려고하지만 작동하지 않고 예외를 반환합니다.테이블에 JPAContainer 구성 요소를 추가 하시겠습니까?

나는이

private final CustomJPAContainer<Curriculum> datasource = new CustomJPAContainer<Curriculum>(Curriculum.class); 

Button btnView = new Button(); 
Table tabela = new Table("",datasource); 
tabela.addContainerProperty("View", Button.class, null); 


//exception 
java.lang.UnsupportedOperationException 
    at com.vaadin.addon.jpacontainer.JPAContainer.addContainerProperty(JPAContainer.java:666) 
    at com.vaadin.ui.AbstractSelect.addContainerProperty(AbstractSelect.java:806) 
    at com.vaadin.ui.Table.addContainerProperty(Table.java:4260) 
    at br.ind.ibg.views.VisualizarCurriculum.buildLayout(VisualizarCurriculum.java:58) 
    at br.ind.ibg.views.VisualizarCurriculum.<init>(VisualizarCurriculum.java:36) 
    at br.ind.ibg.utils.MenuSistema$1.menuSelected(MenuSistema.java:60) 
    at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:186) 
    at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:396) 
    at com.vaadin.server.communication.ServerRpcHandler.handleBurst(ServerRpcHandler.java:221) 
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:111) 
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:91) 
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37) 
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1382) 
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 

어떤 생각을하려고 해요?

/내가 한 방법 ** */ 편집 내가 여기에 문제 사용 setGeneratedColumn()

를 해결했다.

public class ButtonColumnGenerator implements Table.ColumnGenerator{ 
    private static final long serialVersionUID = 1L; 

    @Override 
    public Object generateCell(Table source, Object itemId, Object columnId) { 
     Property prop = source.getItem(itemId).getItemProperty(columnId); 
     Button btnView = new Button(); 
     btnView.setData(itemId); 
     btnView.setDescription("Curriculum: " + itemId); 
     btnView.setIcon(new ThemeResource("../icons/eye.png"));    
     btnView.setWidth("20px"); 
     btnView.setHeight("20px"); 
     btnView.setStyleName(Reindeer.BUTTON_LINK);  

     return btnView; 
    } 
} 


/*** my app */ 
Button btnView = new Button(); 
Table tabela = new Table("",datasource); 
tabela.setVisibleColumns(new Object[]{"idCurriculum", "nome", "cpf"});  
tabela.setColumnHeaders(new String[] {"#", "Nome", "Cpf"}); 
tabela.addGeneratedColumn("", new ButtonColumnGenerator()); 

이제 작동합니다!

답변

0

선택한 구성 요소 (테이블, 트리, TreeTable, ComboBox ...)의 데이터 소스에 UI 구성 요소를 추가하는 것은 잘못된 방식입니다. 테이블 구성 요소의 컨테이너 데이터 소스에는 테이블의 데이터 모델 만 포함되며이 데이터를 표시 할 구성 요소는 포함되지 않습니다.

그래서 대신 (내부적 속성을 처리하는대로이 컨테이너 허용되지 않습니다)을 JPAContainer에 속성을 추가, 당신은 Table.setTableFieldFactory(TableFieldFactory fieldFactory)와 함께 테이블에 사용자 정의 com.vaadin.ui.TableFieldFactory을 설정합니다.

+0

내가 찾은 해결책으로 게시물을 편집했습니다. 나는 내 문제를 해결하기 위해 setGeneratedColumn()을 사용했다. 감사! – FernandoPaiva

관련 문제