ねえ、私は一日中苦労していて、まだ答えを見つけることができません. したがって、私の問題は、xhtml ページに 2 つのフォームがあることです。最初のフォームは、DB からのデータで満たされた primefaces データテーブルを示し、2 番目のフォームは、選択したユーザーからのデータで満たされ、それを編集します。問題は、2 番目のフォームに 2 つの commandButtons がありますが、(ajax 呼び出しを介して) レンダリングした後、ボタンが action 属性のメソッドを呼び出していないように見えることです。
すべてを明確にするための私のコードは次のとおりです。
これは、xhtml ページの最初のフォームです
<h:form id="form" style="width:710px;">
<p:dataTable id="dataTable" var="supervisor" value="#{tablaBean.modeloUsuario}"
paginator="true" rows="15" paginatorPosition="bottom" selection="#{tablaBean.usuarioSel}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}"
rendered="#{tablaBean.showAll}">
<f:facet name="header">
<h:outputText value="Supervisores" />
</f:facet>
<p:column selectionMode="single" style="width:18px" />
<p:column headerText="Id" filterBy="#{supervisor.idUsuario}" filterStyle="width:35px;">
<h:outputText value="#{supervisor.idUsuario}" />
</p:column>
<p:column headerText="Nombre" filterBy="#{supervisor.nombre}" id="nombreh">
<h:outputText value="#{supervisor.nombre}" />
</p:column>
<p:column headerText="Ap. Paterno" filterBy="#{supervisor.apaterno}" id="apat">
<h:outputText value="#{supervisor.apaterno}" />
</p:column>
<p:column headerText="Ap. Materno" filterBy="#{supervisor.amaterno}" id="amat">
<h:outputText value="#{supervisor.amaterno}" />
</p:column>
<p:column headerText="Usuario" filterBy="#{supervisor.nombreUsuario}" id="user">
<h:outputText value="#{supervisor.nombreUsuario}" />
</p:column>
<p:column headerText="Depto." filterBy="#{supervisor.departamento.nombre}" id="deptoh">
<h:outputText value="#{supervisor.departamento.nombre}" />
</p:column>
<f:facet name="footer">
<p:commandButton id="ver" value="Ver" icon="ui-icon-search" update=":form:userData" oncomplete="user.show()" />
<p:commandButton id="editar" value="Editar" icon="ui-icon-pencil" update=":form,:formEdit" action="#{tablaBean.edit()}" />
</f:facet>
</p:dataTable>
</h:form>
これは私の2番目のフォームのコードです
<h:form id="formEdit">
<p:growl />
<p:fieldset legend="Editar Usuario" style="margin: auto;" rendered="#{!tablaBean.showAll}">
<h:panelGrid columns="3">
<h:outputText value="Id" />
<h:outputText value="#{tablaBean.usuarioSel.idUsuario}" id="id" />
<p:message for="id" />
<p:outputLabel for="nombre" value="Nombre" />
<p:inplace>
<p:inputText value="#{tablaBean.usuarioSel.nombre}" id="nombre" required="true" />
</p:inplace>
<p:message for="nombre" />
<p:outputLabel for="appat" value="Apellido Paterno" />
<p:inplace>
<p:inputText value="#{tablaBean.usuarioSel.apaterno}" id="appat" required="true"/>
</p:inplace>
<p:message for="appat" />
<p:outputLabel for="apmat" value="Apellido Materno" />
<p:inplace>
<p:inputText value="#{tablaBean.usuarioSel.amaterno}" id="apmat" required="true"/>
</p:inplace>
<p:message for="apmat" />
<p:outputLabel for="usuario" value="Usuario" />
<p:inplace>
<p:inputText value="#{tablaBean.usuarioSel.nombreUsuario}" id="usuario" required="true">
<f:ajax render="msgUsuario" event="blur" />
<f:validator binding="#{userNameValidator}" />
</p:inputText>
</p:inplace>
<p:message for="usuario" id="msgUsuario" />
<p:outputLabel for="depto" value="Departamento" />
<p:inplace>
<p:inputText value="#{tablaBean.usuarioSel.departamento.nombre}" id="depto" required="true" />
</p:inplace>
<p:message for="depto" />
</h:panelGrid>
<p:commandButton value="Guardar" icon="ui-icon-disk" action="#{tablaBean.editarUsuario()}" />
<p:commandButton id="editar" value="Cancelar" update=":form,:formEdit" icon="ui-icon-pencil" action="#{tablaBean.edit()}" />
</p:fieldset>
したがって、メソッド「edit()」を呼び出すと、showAll 変数の値を変更して、2 番目のフォームをレンダリングし、最初のフォームを「隠す」ようにします。問題は、2 番目のフォームのコマンド ボタンが何もしないことです。(メソッドも入力しないでください)
これが私の豆です
@Named(value = "tablaBean")
@ConversationScoped
public class TablaBean implements Serializable {
@Inject
private UsuariosDao usuario;
@Inject
private Usuarios usuarioSel;
@Inject
private Conversation conversation;
private UserDataModel modeloUsuario;
private boolean showAll;
/**
* Creates a new instance of TablaBean
*/
public TablaBean() {
}
@PostConstruct
public void init() {
start();
modeloUsuario = new UserDataModel(usuario.findSupers());
showAll = true;
}
public void start(){
conversation.begin();
}
public void end(){
conversation.end();
}
public Usuarios getUsuarioSel() {
return usuarioSel;
}
public void setUsuarioSel(Usuarios usuarioSel) {
this.usuarioSel = usuarioSel;
}
public UserDataModel getModeloUsuario() {
return modeloUsuario;
}
public boolean isShowAll() {
return showAll;
}
public void setShowAll(boolean showAll) {
this.showAll = showAll;
}
public UsuariosDao getUsuario() {
return usuario;
}
public void setUsuario(UsuariosDao usuario) {
this.usuario = usuario;
}
public String edit() {
System.out.println("holis");
showAll = !showAll;
return "";
}
public String editarUsuario(){
System.out.println("hola");
end();
return "";
}
}
私が間違っているかもしれないことについてのアドバイスは大歓迎です、事前に感謝します。
編集
もう少しデバッグを行ったところ、最初のフォームで編集ボタンを押すたびにマネージド Bean が呼び出されていることがわかったので、問題は会話 Bean にあると推測しています。
編集 2
バッキング Bean のスコープをアプリケーションに変更しました。編集ボタンを押しても呼び出されませんでしたが、コマンド ボタンはまだ機能しません。