Primefaces:带有inputTextarea的对话框不更新控制器的变量

时间:2015-06-10 21:41:18

标签: jsf jsf-2 primefaces

我有这个对话:

 <p:dialog header="Ingrese Comentario" 
              widgetVar="dlg1" appendTo="@(body)" 
              modal="true" position="top"
              hideEffect="fold" showEffect="fold"
              closable="true" draggable="true"
              >
        <h:form id="d_ingresarComentario">
        <h:panelGrid columns="2">           
            <p:inputTextarea   value="#{tareaController.comentarioNuevo.comentario}"
                               rows="7" cols="60"  
                               placeholder="Ingrese su comentario aquí" 
                               counter="display1" maxlength="200" 
                               counterTemplate="{0} Caracteres faltantes." 
                               >   
            </p:inputTextarea>  
            <br/>
            <h:outputText id="display1"/>
            <f:facet name="footer">
                <p:commandButton id ="c_enviar" 
                                 immediate="true"
                                 actionListener="#{tareaController.crearComentario()}"
                                 value="Enviar" 
                                 oncomplete="dlg1.hide()" global="false">                         
                </p:commandButton>    
            </f:facet>
        </h:panelGrid>   
        </h:form>
    </p:dialog>  

按钮的侦听器工作正常,调用对话框时,文本区域显示值的变量。 但是每当我在文本区域中写入变量(comentarioNuevo.comentario)(它是一个字符串)时,控制器中都不会更新。它始终保持其初始值。 关于我做错了什么的任何想法?

我已经尝试过:在keyup上打印变量的值,是的,它始终是相同的。 使用其他组件进行测试,例如h:inputTextArea或p:inputText,它具有相同的行为,变量不会更新。 是的,我的变量有getter和setter。

我的控制器代码如下:

@ManagedBean
@ViewScoped
public class TareaController implements Serializable {
private Comentario comentario = new Comentario();

    public void crearComentario() {
        comentarioDAO.crearComentario(login.getUsuario(), expediente, comentarioNuevo);
        nuevoComentario();
    }

    public Comentario getComentarioNuevo() {
        return comentarioNuevo;
    }

    public void setComentarioNuevo(Comentario comentarioNuevo) {
        this.comentarioNuevo = comentarioNuevo;
    }
}

Comentario是一个JPA实体,在其他方面工作得很好 附加信息:PrimeFaces版本4.0,Mojarra 2.7,JSF 2.2

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您已在UICommandComponent上设置immediate=true,因此会跳过“更新模型值”阶段。删除属性,它应该工作。

BalusC提供此建议,“如果仅在UICommand中设置,则应用请求值阶段,直到任何UIInput组件将跳过更新模型值阶段。使用此阶段跳过表单的整个处理。例如“取消”或“返回”按钮。“

另见