1

私は問題があります。私は Bean によって Bean に送信される入力を含むフォームを持っています。物事はデバッグされ、Bean オブジェクトでは常に null です。これで私を助けてくれませんか。

ここにコード:

<h:form id="frmNuevo">
      <p:dialog id="dialog" header="Añadir Presupuesto" widgetVar="dialogNuevo" resizable="true" width="500" height="500" showEffect="fade" hideEffect="explode" modal="true">
        <p:growl id="growl" showDetail="true" sticky="true" />
        <h:panelGrid id="display" columns="2" cellpadding="4" style="margin: 0 auto;">
            <h:outputText value="Diciembre:" />
            <p:inputText value="#{presupuestoBean.presupuesto.diciembre}" required="true"                 maxlength="20" />
            <p:commandButton value="Guardar" update=":form:cars, frmNuevo, growl, display" process="@this" actionListener="#{presupuestoBean.insertar}" oncomplete="dialogNuevo.hide()" image="icon-save" />
            <p:commandButton value="Cancelar" update=":form:cars" oncomplete="dialogNuevo.hide()" style="margin-bottom: 20px;" image="icon-cancel" />
        </h:panelGrid>
        <p:separator/></p:dialog>
</h:form>

私は SessionScoped と RequestScoped でテストしましたが、動作しません。奇妙なことに、他の同様の Bean を実行したことがあり、それらが ManagedBean で動作する場合:

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

@ManagedBean(name = "presupuestoBean")
@RequestScoped
public class PresupuestoBean implements Serializable {

    private TbPresupuesto presupuesto;
    private List<TbPresupuesto> presupuestos;
    private UploadedFile file;
    private String destination = "C:\\temp\\";

    public PresupuestoBean() {
        presupuesto = new TbPresupuesto();
        presupuestos = new ArrayList();
    }

    public TbPresupuesto getPresupuesto() {
        return presupuesto;
    }

    public void setPresupuesto(TbPresupuesto presupuesto) {
        this.presupuesto = presupuesto;
    }


    public void prepararInsertar() {
        presupuesto = new TbPresupuesto();
        presupuestos = new ArrayList();
    }

    public void insertar() {
        PresupuestoDaoImpl presupuestoDao = new PresupuestoDaoImpl();
        presupuesto.setPresupuestoId(presupuesto.getLinea().getLineaId());
        presupuestoDao.insertar(presupuesto);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Se ha ingresado correctamente"));
        presupuesto = new TbPresupuesto();
    }

}
4

1 に答える 1

4

フォームはダイアログ内に配置する必要があります。

<p:dialog>
    <h:form>
        ...
    </h:form>
</p:dialog>

<body>ダイアログ コンポーネントの生成された HTML 表現は、モーダル ダイアログを表示する際のクロス ブラウザーの互換性を向上させるために、ページの読み込み中に JavaScript が最後に再配置されます。

したがって、現在のコードでは、ダイアログがフォームに収まらなくなることを意味します。したがって、ダイアログ内で入力値を送信しようとすると、入力値を収集してサーバーに送信するためのフォームがないため、null として終了します。

さらに、コマンド ボタン内の送信ボタンのみを処理しています。

<p:commandButton ... process="@this" />

その属性を削除します。これ@formは、まさにあなたが望むものです。

于 2013-04-25T00:46:08.787 に答える