【问题标题】:Delete link on richFaces dataTable删除richFaces数据表上的链接
【发布时间】:2012-05-25 12:24:56
【问题描述】:

我希望能够从我的数据库中删除用户。该接口类似于以下代码,但永远不会调用 action 方法。我错过了什么?

        <h:form id="formAdministracionUsuarios">
            <br/>
            <rich:panel style="width: 800px">
                <f:facet name="header">
                    <h:outputText value="Administración de usuarios"/>
                </f:facet>

                <rich:dataScroller for="usersTable" fastControls="hide"
                                   boundaryControls="hide" />
                <h:panelGroup/>
                <rich:dataTable id="usersTable" rows="10" var="user"
                                value="#{administrationBean.tablaUsuarios}">
                    <f:facet name="header">
                        <rich:columnGroup>
                            <rich:column>
                                <h:outputText value="Nombre"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Usuario"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Dependencia"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Email"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Tipo usuario"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Tipo dependencia"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Fecha límite"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Eliminar"/>
                            </rich:column>
                        </rich:columnGroup>
                    </f:facet>
                    <rich:column>
                        <h:outputText value="#{user.nombre}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.usuario}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.dependencia}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.correo}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.tipoUsuario}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.tipoDependencia}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.fechaLimiteCarga}"/>
                    </rich:column>
                    <rich:column>
                        <a4j:commandLink value="Eliminar" execute="@form"
                                         action="#{administrationBean.doEliminarUsuario(user.usuario)}"/>
                    </rich:column>
                </rich:dataTable>
                <a4j:outputPanel>
                    <br/><br/>
                    <fieldset>                                
                        <legend>Datos del usuario</legend>
                        <h:panelGrid id="camposUsuario" columns="2">
                            <h:outputLabel value="Nombre" for="queryNombre"/>
                            <h:outputLabel value="Usuario" for="queryUsuario"/>
                            <h:inputText id="queryNombre" required="true"
                                         requiredMessage="Introduzca el nombre." immediate="true"
                                         value="#{administrationBean.queryNombre}">
                                <f:ajax event="keypress" 
                                        listener="#{administrationBean.doClearMessages}"
                                        render="datosUsuario"/>
                            </h:inputText>
                            <h:inputText id="queryUsuario" required="true"
                                         requiredMessage="Introduzca el nombre de usuario."
                                         value="#{administrationBean.queryUsuario}">
                            </h:inputText>                                
                            <rich:message ajaxRendered="true" for="queryNombre"/>
                            <rich:message ajaxRendered="true" for="queryUsuario"/>

                            <h:outputLabel value="Contraseña:" for="queryContrasena"/>
                            <h:outputLabel value="Dependencia:" for="queryDependencia"/>
                            <h:inputSecret id="queryContrasena" required="true"
                                           requiredMessage="Introduzca la contraseña."
                                           value="#{administrationBean.queryContrasena}"/>
                            <rich:select id="queryDependencia" required="true"
                                         requiredMessage="Seleccione la dependencia."
                                         defaultLabel="Dependencia..."
                                         value="#{administrationBean.queryDependencia}">
                                <f:selectItems value="#{administrationBean.selectDependencia}"/>
                            </rich:select>
                            <rich:message ajaxRendered="true" for="queryContrasena"/>
                            <rich:message ajaxRendered="true" for="queryDependencia"/>                                

                            <h:outputLabel value="Correo" for="queryCorreo"/>
                            <h:outputLabel value="Fecha límite:" for="queryFechaLimite"/>
                            <h:inputText id="queryCorreo" required="true"
                                         requiredMessage="Introduzca el correo."
                                         value="#{administrationBean.queryCorreo}"/>
                            <rich:calendar id="queryFechaLimite" datePattern="dd/MM/yyyy"
                                           value="#{administrationBean.queryFechaLimite}"/>
                            <rich:message ajaxRendered="true" for="queryCorreo"/>

                        </h:panelGrid>
                        <h:panelGrid columns="3">
                            <a4j:commandButton value="Agregar" execute="@form"
                                               render="datosUsuario usersTable camposUsuario"
                                               action="#{administrationBean.doRegistrarUsuario}"/>
                        </h:panelGrid>
                        <a4j:outputPanel id="datosUsuario" style="font-size: 14px; color: #D17100">
                            <h:outputText rendered="#{administrationBean.alreadyRegistered}"
                                          value="Usuario ya existe !"/>
                            <h:outputText rendered="#{administrationBean.registrationComplete}"
                                          value="Usuario registrado !"/>
                        </a4j:outputPanel>
                    </fieldset>
                </a4j:outputPanel>
            </rich:panel>

            <br/>
        </h:form>

更新 贴出完整表格的代码。

【问题讨论】:

  • 您是否遇到任何错误?您的表格是否是表单的一部分,我认为您需要提交页面才能执行任何 bean 操作
  • 不,我没有收到任何错误。我实际上尝试过使用actionListener 和action,但它们都没有触发删除方法。该表是表单的一部分。
  • 我已经更新了我的问题。我已经发布了所有代码......我想我现在有一个线索,我慢慢阅读代码......可能是因为输入字段中的验证,但是如何解决它?
  • 你想调用doEliminarUsuario函数删除用户吗?你想删除哪个用户??您是否通过使用表的selection 属性选择了任何用户.. 您尝试的是将所有用户列表作为参数,并且由于参数不匹配,它将不会调用 d 方法....所以告诉我是你决定删除哪个用户??????也许我可以帮助你.....

标签: jsf-2 datatable richfaces


【解决方案1】:

我找到了。 整个表单包括dataTable 材料和新用户材料的注册,即inputFields。

发生的情况是,当h:commandLink 中的方法被调用时,由于required 属性在inputFields 中设置为true,因此没有触发该操作。

我所做的是将我的东西分成两种形式,第一种形式 dataTable 相关的东西和第二种形式 InputFields 的东西

这样我就避免了 inputFields 中的必需属性,因此现在正在调用 commandLink 中的 action 方法。

这是现在的样子:

            <h:form id="formUsuariosRegistrados">
                <rich:dataScroller for="usersTable" fastControls="hide"
                                   boundaryControls="hide" />
                <rich:dataTable id="usersTable" rows="10" var="user"
                                value="#{administrationBean.tablaUsuarios}">
                    <f:facet name="header">
                        <rich:columnGroup>
                            <rich:column>
                                <h:outputText value="Nombre"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Usuario"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Dependencia"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Email"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Tipo usuario"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Tipo dependencia"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Fecha límite"/>
                            </rich:column>
                            <rich:column>
                                <h:outputText value=""/>
                            </rich:column>
                        </rich:columnGroup>
                    </f:facet>
                    <rich:column>
                        <h:outputText value="#{user.nombre}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.usuario}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.dependencia}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.correo}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.tipoUsuario}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.tipoDependencia}"/>
                    </rich:column>
                    <rich:column>
                        <h:outputText value="#{user.fechaLimiteCarga}"/>
                    </rich:column>
                    <rich:column>
                        <a4j:commandLink value="Eliminar"
                                         render="@form :formFechaLimite :formModificarContrasena"
                                         actionListener="#{administrationBean.doEliminarUsuario(user.usuario)}"/>
                    </rich:column>
                </rich:dataTable>
            </h:form>

            <br/>

                <h:form id="formRegistroUsuarios">
                    <a4j:outputPanel>
                        <br/><br/>
                        <fieldset style="width: 350px" >
                            <legend>Datos del usuario</legend>
                            <h:panelGrid id="camposUsuario" columns="2">
                                <h:outputLabel value="Nombre" for="queryNombre"/>
                                <h:outputLabel value="Usuario" for="queryUsuario"/>
                                <h:inputText id="queryNombre" required="true"
                                             requiredMessage="Introduzca el nombre." immediate="true"
                                             value="#{administrationBean.queryNombre}">
                                    <f:ajax event="focus" 
                                            listener="#{administrationBean.doClearMessages}"
                                            render="registroCompletado"/>
                                </h:inputText>
                                <h:inputText id="queryUsuario" required="true"
                                             requiredMessage="Introduzca el nombre de usuario."
                                             value="#{administrationBean.queryUsuario}">
                                </h:inputText>                                
                                <rich:message ajaxRendered="true" for="queryNombre"/>
                                <rich:message ajaxRendered="true" for="queryUsuario"/>

                                <h:outputLabel value="Contraseña:" for="queryContrasena"/>
                                <h:outputLabel value="Dependencia:" for="queryDependencia"/>
                                <h:inputSecret id="queryContrasena" required="true"
                                               requiredMessage="Introduzca la contraseña."
                                               value="#{administrationBean.queryContrasena}"/>
                                <rich:select id="queryDependencia" required="true"
                                             requiredMessage="Seleccione la dependencia."
                                             defaultLabel="Dependencia..."
                                             value="#{administrationBean.queryDependencia}">
                                    <f:selectItems value="#{administrationBean.selectDependencia}"/>
                                </rich:select>
                                <rich:message ajaxRendered="true" for="queryContrasena"/>
                                <rich:message ajaxRendered="true" for="queryDependencia"/>                                

                                <h:outputLabel value="Correo" for="queryCorreo"/>
                                <h:outputLabel value="Fecha límite:" for="queryFechaLimite"/>
                                <h:inputText id="queryCorreo" required="true"
                                             requiredMessage="Introduzca el correo."
                                             value="#{administrationBean.queryCorreo}"/>
                                <rich:calendar id="queryFechaLimite" datePattern="dd/MM/yyyy"
                                               value="#{administrationBean.queryFechaLimite}"/>
                                <rich:message ajaxRendered="true" for="queryCorreo"/>

                            </h:panelGrid>
                            <h:panelGrid columns="3">
                                <a4j:commandButton value="Agregar" execute="@form"
                                                   render="registroCompletado :formUsuariosRegistrados camposUsuario :formFechaLimite :formModificarContrasena"
                                                   action="#{administrationBean.doRegistrarUsuario}"/>
                            </h:panelGrid>
                            <a4j:outputPanel id="registroCompletado" style="font-size: 14px; color: #D17100">
                                <h:outputText rendered="#{administrationBean.alreadyRegistered}"
                                              value="Usuario ya existe !"/>
                                <h:outputText rendered="#{administrationBean.registrationComplete}"
                                              value="Usuario registrado !"/>
                            </a4j:outputPanel>
                        </fieldset>
                    </a4j:outputPanel>
                </h:form>

【讨论】:

    【解决方案2】:

    如果您只想从显示的表格中删除一个用户,那么您必须使用 selection 从那里选择一个用户。
    那么在那种情况下 -
    将表中的 selection 属性设置为 -

    selection = "#{bean.selectionTableState}"  
    

    并在 bean 中声明为

    //import for Selection
    private Selection selectionTableState;
    

    然后在action方法中使用这个选择来获取当前用户。

    //suppose ClassA is an object class for representing all users in the table, 
    //and make sure your **tablaUsuarios** is of that ClassA type.
    //so that u can catch one by selection
    ClassA classA = this.tablaUsuarios.get(Integer.parseInt(this.selectionTableState.getKeys().next().toString()));
    

    这个classA现在包含选定的用户。
    您只需使用 sql 查询将用户的主要价值之一(如 userID)发送到您的 DAO 即可删除用户。
    我相信它会对你有所帮助......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多