我希望能够从我的数据库中删除用户。接口具有类似下面的代码,但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>
更新 发布完整表格的代码。
答案 0 :(得分:1)
我找到了。
整个表单包含dataTable
内容和新用户资料的注册,即inputFields
。
发生的事情是,当h:commandLink
中的方法被调用时,由于required
中inputFields
属性设置为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>
答案 1 :(得分:0)
如果你想从显示的表中只删除一个用户,那么你必须使用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
。
我相信它会帮助你......