我有这个对话:
<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
感谢您的帮助!
答案 0 :(得分:3)
您已在UICommandComponent上设置immediate=true
,因此会跳过“更新模型值”阶段。删除属性,它应该工作。
BalusC提供此建议,“如果仅在UICommand中设置,则应用请求值阶段,直到任何UIInput组件将跳过更新模型值阶段。使用此阶段跳过表单的整个处理。例如“取消”或“返回”按钮。“