2012-05-17 35 views
0

我希望能夠從我的數據庫中刪除用戶。界面有如下代碼,但action方法永遠不會被調用。我錯過了什麼?刪除richFaces數據上的鏈接表

 <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> 

UPDATE 後的完整形式的代碼。

+0

您是否收到任何錯誤?你的表格是表格的一部分,我認爲你需要提交頁面以執行任何bean動作 –

+0

nope,我根本沒有得到任何錯誤。我實際上嘗試過使用'actionListener'和'action',但沒有一個會觸發刪除方法。表格是表格的一部分。 – BRabbit27

+1

嘗試更改鏈接提交表單,檢查出http://stackoverflow.com/questions/3701908/html-making-a-link-submit-in-form和http://stackoverflow.com/questions/313478/如何最好地使鏈接提交表格 –

回答

1

我找到了。 整個表格包括dataTable材料和新用戶材料的註冊,即inputFields

發生了什麼事情是,當調用h:commandLink中的方法時,由於inputFields中的required屬性設置爲true,因此未觸發操作。

我所做的是兩種形式我的東西,第一種形式dataTable相關的東西,第二種形式InputFields東西

隨着該分開我避免inputFields所需的屬性等等action方法在commandLink現在被稱爲。

下面是它看起來像現在:

  <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> 
0

如果你只想從表中刪除一個用戶,那麼你必須使用selection從那裏選擇一個用戶。
那麼在這種情況下 -
設定selection屬性表爲 -

selection = "#{bean.selectionTableState}" 

和豆聲明爲

//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現在在它的選擇的用戶。
你只需發送一個像userID這樣的用戶的主要價值到您的DAO通過使用sql查詢刪除用戶。
我相信它會幫助你......