2013-04-24 65 views
1

我遇到問題。我有一個形式爲 的輸入被髮送給一個bean,這個東西被調試,在這個bean對象中總是爲null。你能幫我解決這個問題嗎?帶有managedBeans的Primefaces始終返回空值

下面的代碼:

<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測試並不起作用,奇怪的是我曾經做過其它類似的豆子,如果他們的工作 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(); 
    } 

} 
+0

請同時發佈您的presupuestoBean代碼 – 2013-04-24 21:57:15

+0

現在我添加豆 – 2013-04-24 22:07:33

+0

可以請你發佈你的stacktrace嗎?或者說哪個對象爲空 – 2013-04-24 22:19:01

回答

4

表單必須進入對話框。

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

對話框組分的產生的HTML表示,以提高呈遞模式對話框的跨瀏覽器兼容搬遷到的<body>結束由JavaScript網頁加載過程中即是。

使用您當前的代碼,這意味着該對話框將不再以某種形式存在。因此,當您嘗試在對話框中提交輸入值時,它們將以空值結束,因爲沒有表單來收集輸入值並將其發送到服務器。

此外,您只處理命令按鈕內的提交按鈕。

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

刪除該屬性。它已經默認爲@form,這正是你想要的。

+0

仍然不起作用,我的解決方案是將每個輸入的ID放在過程中,例如:process =「@ this,year,month .....」謝謝@BalusC – 2013-04-25 05:32:37

+0

只要刪除'process完全屬性。 – BalusC 2013-04-25 10:31:49

+0

好,謝謝,現在是工作! – 2013-04-25 17:11:24