Java 选择后动态删除行

Java 选择后动态删除行,java,hibernate,jsf-2,Java,Hibernate,Jsf 2,我在尝试动态删除数据表中的一行时遇到问题。根据这篇文章: 在我在一个数据表中选择一行并将该行的对象添加到另一个数据表中之后,是否有方法自动刷新数据表;也就是说,如果我选择“A”并点击“添加”按钮,“A”将出现在我的第二个数据表中,最初包含“A”的第一个数据表将刷新,并从表中删除 这就是我到目前为止所做的: Index.xhtml <p:column> <h:commandLink value ="selection" action="#{usuariosGruposBean.

我在尝试动态删除数据表中的一行时遇到问题。根据这篇文章:

在我在一个数据表中选择一行并将该行的对象添加到另一个数据表中之后,是否有方法自动刷新数据表;也就是说,如果我选择“A”并点击“添加”按钮,“A”将出现在我的第二个数据表中,最初包含“A”的第一个数据表将刷新,并从表中删除

这就是我到目前为止所做的:

Index.xhtml

<p:column> <h:commandLink value ="selection" action="#{usuariosGruposBean.selectionOfUserObject}">
<f:setPropertyActionListener target="#{usuariosGruposBean.user}" value="#{users}"/></h:commandLink>
</p:column>
我将以前的方法修改为testMethod 运行应用程序后,我现在出现以下错误:

WARNING: #{usuariosGruposBean.finishAddUsuariosGrupos}: java.lang.IndexOutOfBoundsException: Index: 125, Size: 3
javax.faces.FacesException: #{usuariosGruposBean.finishAddUsuariosGrupos}: java.lang.IndexOutOfBoundsException: Index: 125, Size: 3
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:636)
我添加了一个图表来阐明我试图实现的目标。我没有使用“更新”按钮手动更新数据表。事实上,我正在努力做到以下几点:

  • 使用primefaces“单行选择”数据表选择行
  • 点击添加按钮
  • 数据表会自动更新

我建议使用AJAX标记来实现这一点。查看f:ajax标记的用法


您还可以使用a4J:support标记动态“更新”特定容器中的内容。a4J:commandLink和a4J:commandButton也是使用和更新内容的另一个选项。看看这些标签,因为在互联网上有很多例子。顺便说一句,“a4J”标记是RichFaces API的一部分。

您需要的只是使用ajax。您可能希望使用一个内置支持ajax的库,如primefaces和RichFaces。然后您可以使用按钮的update属性来立即更新数据表。

我目前正在使用primefaces、hibernate、,和JSF来构建我的应用程序。知道jsf/primefaces/hibernate是否类似于标签吗?f:ajax是JSF2.0的一部分。您可以将事件连接到标记,如onchange或onclick或类似的,并让ajax标记在bean中调用一个方法来更改日期表的内容。之后,可以使用ajax标记的render属性重新呈现日期表组件。希望这有帮助!还可以在这里查看更多信息:我有以下方法来比较两个数据表之间的行(我刚刚发布了它)。但是,数据表仍然不会刷新和删除行。只需从ajax标记调用此方法(假设它正在做它应该做的事),然后重新呈现DateTable。我执行了以下操作,但我出现以下错误…:/你知道哪里出了问题吗?我正在尝试动态更新我的表,而不必单击“更新”按钮。我在应用程序中使用primefaces单行选择数据表,我希望在选择一行并单击“添加”按钮之后。datatable会自动更新自身。有可能吗?
有可能吗?
当然有,请注意PrimeFaces手册中的dataTable部分。它不仅有各种监听器,而且还有支持ajax的事件处理程序。您可以尝试这样的操作
onRowEditUpdate=“@this”
WARNING: #{usuariosGruposBean.finishAddUsuariosGrupos}: java.lang.IndexOutOfBoundsException: Index: 125, Size: 3
javax.faces.FacesException: #{usuariosGruposBean.finishAddUsuariosGrupos}: java.lang.IndexOutOfBoundsException: Index: 125, Size: 3
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:636)