We have a problem using a JPAContainer in a TwinColSelect. We added a MultiSelectConverter to Convert the values of the TwinColSelect and get the following Exception:
Aug 12, 2015 8:11:17 AM com.vaadin.server.DefaultErrorHandler doDefault
SCHWERWIEGEND:
java.lang.NullPointerException
at com.vaadin.addon.jpacontainer.fieldfactory.MultiSelectConverter.getModelType(MultiSelectConverter.java:220)
at com.vaadin.ui.AbstractField.getModelType(AbstractField.java:771)
at com.vaadin.ui.AbstractField.validate(AbstractField.java:956)
at com.vaadin.ui.AbstractField.validate(AbstractField.java:934)
at com.vaadin.ui.AbstractField.getErrorMessage(AbstractField.java:1043)
at com.vaadin.ui.AbstractComponent.beforeClientResponse(AbstractComponent.java:721)
at com.vaadin.ui.AbstractField.beforeClientResponse(AbstractField.java:1706)
at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:98)
at com.vaadin.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:149)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:98)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
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 net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:95)
at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at de.vbg.util.LazyHibernateServletFilter.doFilter(LazyHibernateServletFilter.java:30)
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:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
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:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
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)
The TwinColSelect:
[code]
@PropertyId(“beteilfachb”)
private TwinColSelect twinBeteilFachb;
twinBeteilFachb = new TwinColSelect(Messages.getString(“DetailView.beteilfachb.caption”)); //$NON-NLS-1$
twinBeteilFachb.setDescription(Messages.getString(“DetailView.beteilfachb.description”)); //$NON-NLS-1$
twinBeteilFachb.setContainerDataSource(fachbereichContainer_BeteilFachb);
twinBeteilFachb.setItemCaptionPropertyId(“wert”); //$NON-NLS-1$
twinBeteilFachb.setItemCaptionMode(ItemCaptionMode.PROPERTY);
twinBeteilFachb.setRows(fachbereichContainer_BeteilFachb.size());
twinBeteilFachb.setLeftColumnCaption(“Fachbereich:”); //$NON-NLS-1$
twinBeteilFachb.setRightColumnCaption(“Auswahl:”); //$NON-NLS-1$
twinBeteilFachb
.setConverter(new MultiSelectConverter(twinBeteilFachb));
[/code]The JPAContainer is filled with KeyValues of Typ Fachbereich :
JPAContainer<Fachbereich> fachbereichContainer_BeteilFachb = dataProvider.getFachbereich();
Fachbereich looks like these:
[code]
@Entity
public class Fachbereich implements Serializable {
private static final long serialVersionUID = 4569974101928571427L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
@Column(length = 50)
private String wert;
@ManyToMany(mappedBy = "beteilfachb")
private final Set<Steckbrief> steckbriefe_beteilfachb = new HashSet<>();
@OneToMany(mappedBy = "fachbereich")
private Set<User> users;
@OneToMany(mappedBy = "fachb")
private final Set<Steckbrief> steckbriefe_fachb = new HashSet<>();
public Fachbereich() {
super();
}
public Fachbereich(String wert) {
super();
this.wert = wert;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWert() {
return wert;
}
public void setWert(String wert) {
this.wert = wert;
}
public static Object[] getFieldNames() {
return new Object[] { "id", "wert" };
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
[/code]Could anyone help?
PS: The SingleSelectConverter for SingleSelects works fine…but we nedd MultiSelect