我遇到了actionlistener和action的问题。该页面获取一些数据(表单1),在数据库中查找并检索列表(对于数据表)。但第二种形式不起作用。它只是刷新网络。这是我的第一次尝试。
<h:form id="form-fecha-inicio" class="form-inline">
<!-- some columns -->
<h:commandButton id="btnBuscarProyectos" class="btn btn-primary"
action="#{backing.buscarProyectos()}"
value="Buscar">
<f:ajax execute="fechaInicio fechaFin nombreCliente" render="tablaProyectos"
onevent="darFormatoTabla"/>
</h:commandButton>
</h:form>
<h:dataTable id="tablaProyectos" var="proyecto" value="#{backing.listaProyectos}"
styleClass="table table-striped table-bordered table-hover">
<!-- some columns -->
<h:column>
<h:form> <!-- this form doesn't work -->
<h:commandButton id="bModificar" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.modificar']}"
action="#{backing.modificarProyecto(proyecto)}"/>
<h:commandButton id="bPDF" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.pdf']}"
actionListener="#{backing.verPDF(proyecto)}"/>
<h:commandButton id="bDOC" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.doc']}"
actionListener="#{backing.verDOC(proyecto)}"
rendered="#{backing.administrador}"/>
</h:form>
</h:column>
</h:dataTable>
由于它不起作用,我尝试了其他的东西。我删除了ajax和动作,放了一个actionlistener,令我惊讶的是它有效!但我不知道为什么......
<h:form id="form-fecha-inicio" class="form-inline">
<!-- some columns -->
<h:commandButton id="btnBuscarProyectos" class="btn btn-primary"
actionListener="#{backing.buscarProyectos()}"
value="Buscar">
</h:commandButton>
</h:form>
<h:dataTable id="tablaProyectos" var="proyecto" value="#{backing.listaProyectos}"
styleClass="table table-striped table-bordered table-hover">
<!-- some columns -->
<h:column>
<h:form>
<h:commandButton id="bModificar" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.modificar']}"
action="#{backing.modificarProyecto(proyecto)}"/>
<h:commandButton id="bPDF" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.pdf']}"
actionListener="#{backing.verPDF(proyecto)}"/>
<h:commandButton id="bDOC" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.doc']}"
actionListener="#{backing.verDOC(proyecto)}"
rendered="#{backing.administrador}"/>
</h:form>
</h:column>
</h:dataTable>
这次最终尝试的唯一问题是我没有调用js函数“darFormatoTabla”。为什么第一次尝试不起作用?第二次尝试是一种好方法吗?如果是这种情况,我该怎么做才能调用js函数“darFormatoTabla()”。我用它来调用DataTable jQuery插件。谢谢。
更新: 我不确定我的问题是否与BalusC状态相同但我可以修复它而没有修复mojarra错误的js脚本。无论如何,谢谢你提出答案BalusC,我不知道该bug存在。 这是我做的:
<h:form id="form-fecha-inicio" class="form-inline">
<!-- some columns -->
<h:commandButton id="btnBuscarProyectos" class="btn btn-primary"
action="#{backing.buscarProyectos()}"
value="Buscar">
<f:ajax execute="fechaInicio fechaFin nombreCliente" render="form-opciones-proyecto:tablaProyectos"
onevent="darFormatoTabla"/>
</h:commandButton>
</h:form>
<h:form id="form-opciones-proyecto">
<h:dataTable id="tablaProyectos" var="proyecto" value="#{backing.listaProyectos}"
styleClass="table table-striped table-bordered table-hover tablaProyectos">
<!-- some columns -->
<h:column>
<h:commandButton id="bModificar" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.modificar']}"
action="#{backing.modificarProyecto(proyecto)}"/>
<h:commandButton id="bPDF" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.pdf']}"
actionListener="#{backing.verPDF(proyecto)}"/>
<h:commandButton id="bDOC" class="btn btn-default btn-group-sm"
value="#{rCProyecto['ver.proyectos.doc']}"
actionListener="#{backing.verDOC(proyecto)}"
rendered="#{backing.administrador}"/>
</h:column>
</h:dataTable>
</h:form>