【发布时间】:2014-06-03 14:58:46
【问题描述】:
我正在尝试创建一个页面,用户可以在其中插入一个或多个提供者,检查所有插入的提供者,然后确认。只有当用户确认时,所有插入的提供者才会存储在我的数据库中。 我怎样才能做到这一点?看来,如果我使用我的 ManagedBean 控制器,以及我将存储提供程序的列表,我会收到一个奇怪的错误
HTTP Status 500 -
root cause
java.lang.NullPointerException
it.myProject.model.Provider.equals(Provider.java:71)
org.apache.myfaces.shared.util.SelectItemsIterator.next(SelectItemsIterator.java:275)
org.apache.myfaces.shared.util.SelectItemsIterator.next(SelectItemsIterator.java:49)
org.apache.myfaces.shared.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:800)
org.apache.myfaces.shared.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:764)
org.apache.myfaces.shared.renderkit.html.HtmlSelectableRendererBase.internalRenderSelect(HtmlSelectableRendererBase.java:74)
org.apache.myfaces.shared.renderkit.html.HtmlMenuRendererBase.renderMenu(HtmlMenuRendererBase.java:91)
org.apache.myfaces.shared.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:76)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:665)
javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:545)
javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)
javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)
org.apache.myfaces.shared.view.JspViewDeclarationLanguageBase.actuallyRenderView(JspViewDeclarationLanguageBase.java:364)
org.apache.myfaces.shared.view.JspViewDeclarationLanguageBase.renderView(JspViewDeclarationLanguageBase.java:201)
org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
这是我的 ProviderController 的代码
@ManagedBean
public class ProviderController{
private Long id;
private String vat;
private String address;
private List<Product> products;
private Provider provider;
private List<Provider> providers;
public ProviderController() {
this.products= new LinkedList<>();
this.providers= new LinkedList<>();
}
//adds the Provider in the c:forEach of the view newProvider.jsp
public String addProvider() {
this.provider= new Provider(vat, address, products);
this.providers.add(this.provider);
return "newProvider";
}
-我省略了外观,因为在这种情况下我没有任何东西要存储,我只想在列表中添加提供者,然后用另一种方法在我的数据库中添加列表的所有提供者
-Provider是使用注解@Entity的Model,所以我怀疑不使用EntityManager就不能使用Provider
如果我是对的,我该怎么做才能将我的提供者简单地存储在会话中?我必须创建另一个类 Provider?我必须创建另一个 ProviderController?
非常感谢您的回答。
【问题讨论】:
-
尝试使用对话范围。当控制器开始调用 Conversation.begin() 以启动范围。然后每个请求都会创建一个新的 Provider。完成后,您使用 Conversation.end() 结束对话范围并将提供者存储在数据库中。搜索互联网以阅读对话范围。
标签: java jsf session controller