2017-03-01 27 views
0

我有一顆豆如下:Vaadin:綁定一個byte []字段

public class Step implements Serializable { 

    private int stepSequence; 
    private byte[] text; 
    private byte[] expectedResult; 
    private String notes; 
... 
    getters and setters 
} 

,我試圖綁定這樣的:

BeanFieldGroup binder = new BeanFieldGroup(s.getClass()); 
     binder.setItemDataSource(s); 
     Field<?> sequence = binder.buildAndBind("Sequence", "stepSequence"); 
     layout.addComponent(sequence); 
//  Field<?> text = binder.buildAndBind("Text", "text"); 
//  layout.addComponent(text); 
//  Field<?> result = binder.buildAndBind("Expected Result", "expectedResult"); 
//  layout.addComponent(result); 
     Field<?> notes = binder.buildAndBind("Notes", "notes"); 
     layout.addComponent(notes); 

的copmmented領域提供以下錯誤:

com.vaadin.data.Buffered$SourceException 
    at com.vaadin.ui.AbstractField.setPropertyDataSource(AbstractField.java:667) 
    at com.vaadin.data.fieldgroup.FieldGroup.bind(FieldGroup.java:274) 
    at com.vaadin.data.fieldgroup.BeanFieldGroup.bind(BeanFieldGroup.java:155) 
    at com.vaadin.data.fieldgroup.FieldGroup.buildAndBind(FieldGroup.java:1207) 
    at com.vaadin.data.fieldgroup.BeanFieldGroup.buildAndBind(BeanFieldGroup.java:162) 
    at com.vaadin.data.fieldgroup.FieldGroup.buildAndBind(FieldGroup.java:1185) 
    at net.sourceforge.javydreamercsw.validation.manager.web.ValidationManagerUI.displayStep(ValidationManagerUI.java:205) 
    at net.sourceforge.javydreamercsw.validation.manager.web.ValidationManagerUI.displayStep(ValidationManagerUI.java:193) 
    at net.sourceforge.javydreamercsw.validation.manager.web.ValidationManagerUI.lambda$buildProjectTree$4a09dcf$1(ValidationManagerUI.java:721) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163) 
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1015) 
    at com.vaadin.ui.AbstractField.fireValueChange(AbstractField.java:1164) 
    at com.vaadin.ui.AbstractField.setValue(AbstractField.java:572) 
    at com.vaadin.ui.AbstractSelect.setValue(AbstractSelect.java:739) 
    at com.vaadin.ui.AbstractField.setValue(AbstractField.java:469) 
    at com.vaadin.ui.AbstractSelect.changeVariables(AbstractSelect.java:549) 
    at com.vaadin.ui.Tree.changeVariables(Tree.java:568) 
    at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:608) 
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:458) 
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408) 
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273) 
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90) 
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) 
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1422) 
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:379) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.vaadin.data.util.converter.Converter$ConversionException: Unable to convert value of type [B to presentation type class java.lang.String. No converter is set and the types are not compatible. 
    at com.vaadin.data.util.converter.ConverterUtil.convertFromModel(ConverterUtil.java:118) 
    at com.vaadin.ui.AbstractField.convertFromModel(AbstractField.java:738) 
    at com.vaadin.ui.AbstractField.convertFromModel(AbstractField.java:723) 
    at com.vaadin.ui.AbstractField.setPropertyDataSource(AbstractField.java:659) 
    ... 55 more 

如何添加提及的轉換器?

是否有另一種方法來實現這一目標?

回答

0

我不停地四處探查,並能夠使其工作。下面是爲別人找到這個問題的答案:

TextField text = new TextField("Text"); 
    text.setConverter(new ByteToStringConverter()); 
    binder.bind(text, "text"); 
    layout.addComponent(text); 
    TextField result = new TextField("Expected Result"); 
    result.setConverter(new ByteToStringConverter()); 
    binder.bind(result, "expectedResult"); 
    layout.addComponent(result); 

和轉換器:

private static class ByteToStringConverter implements Converter<String, byte[]> { 

    @Override 
    public byte[] convertToModel(String value, 
      Class<? extends byte[]> targetType, 
      Locale locale) throws ConversionException { 
     try { 
      return value.getBytes("UTF-8"); 
     } catch (UnsupportedEncodingException ex) { 
      Exceptions.printStackTrace(ex); 
     } 
     return null; 
    } 

    @Override 
    public String convertToPresentation(byte[] value, 
      Class<? extends String> targetType, Locale locale) 
      throws ConversionException { 
     return new String(value, StandardCharsets.UTF_8); 
    } 

    @Override 
    public Class<byte[]> getModelType() { 
     return byte[].class; 
    } 

    @Override 
    public Class<String> getPresentationType() { 
     return String.class; 
    } 
}