2013-04-24 18 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