选择后动态删除行

时间:2011-11-04 12:16:51

标签: java hibernate jsf-2

我无法动态删除数据表中的行。基于这篇文章:

JSF 2.0 Dynamically Remove Components

在我选择1个数据表中的行后,是否有办法自动刷新数据表,并将该特定行的对象添加到另一个数据表中;这意味着,如果我选择“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>

UserGroup Bean

 public void selectionOfUserObject() {
        var1 = user.getId_usuario();
    }

public void testMethod() {
        listOfUsuarios = getListOfUsuarios();
        listOfUserGroups = getListOfUserGroups();
        selectionOfUserObject();

        if(listOfUsuarios.get(var1).equals(listOfUserGroups.get(var1))) {
            removeUsuarios();
        }
        else {
            System.out.println("Did not work");
        }
    }
}



public void finishAddUsuariosGrupos() {
        this.grps = grpDAO.getGrps(var2);
        this.user = userDAO.getUsuarios(var1);

        this.userGroups.setId_grupo(var2);
        this.userGroups.setId_usuario(var1);
        this.userGroups.setGroup(grps);
        this.userGroups.setUser(user);
        userGrpDAO.saveUsuariosGrupos(userGroups);
        testMethod();

    }

我将之前的方法修改为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“单行选择”数据表
  • 选择行
  • 点击添加按钮
  • 数据表自行更新。

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你只需要使用ajax。你可能想要使用一个内置支持ajax的库,比如primefaces和richfaces。然后你会使用你的按钮的update属性来立即更新你的数据表。