当我在 Primefaces 上打开带有必填字段的模态对话框时,如何阻止验证触发
Posted
技术标签:
【中文标题】当我在 Primefaces 上打开带有必填字段的模态对话框时,如何阻止验证触发【英文标题】:How to stop Validation from firing when I open modal dialog with required fields on Primefaces 【发布时间】:2018-05-01 14:27:43 【问题描述】:对于这种特殊情况,我无法理解 JSF 生命周期。
我正在尝试使用 Primefaces 6.0 开发一个简单的模态 CRUD,但我遇到了添加/编辑模态的行为问题。
我想要完成的是:
添加
-
点击添加按钮
添加/编辑对话框打开
InputText "field1" is disabled=false
编辑
-
点击编辑按钮
添加/编辑对话框打开
InputText "field1" is disabled=true
为此,我将“field1”disabled 属性链接到我的 bean 上的 editMode 变量。
当我单击添加按钮时,链接操作 initAddRubro 被触发并设置 editMode = false(假设默认情况下为 true)。
问题是,当我在没有立即 = true 的情况下单击“添加”按钮时,会触发“添加/编辑”模式窗口的验证(Field1 is required=true)。
如果我在 Add Button 上使用 immediate=true,则 disabled 属性不会被刷新。
脸豆
@Component
@Scope("session")
public class RubrosFacesBean implements Serializable
private boolean editMode = true;
public String initAddRubro()
editMode = false;
return null;
页面
<p:commandButton value="Add" icon="ui-icon-plusthick"
oncomplete="PF('addPanelDialog').show();" style="float: right"
immediate="true" ajax="true" action="#rubrosFacesBean.initAddRubro"/>
<p:dialog header="Rubro" widgetVar="addPanelDialog" style="margin-left: auto;" modal="true" id="addPanelDialog" >
<p:messages autoUpdate="true" />
<p:panelGrid columns="2" id="addPanel">
<h:outputLabel for="field1" value="Field 1: " />
<p:inputText id="field1" value="#rubrosFacesBean.field1" label="Field1" required="true" disabled="#rubrosFacesBean.editMode"/>
</p:panelGrid>
</p:dialog>
感谢任何帮助。 提前致谢。
胡安-
【问题讨论】:
嗨,1000 个问题的链接对您没有帮助吗?请阅读How to Ask,特别是minimal reproducible example 部分。代码值一千字…… @Kukeltje 感谢您的回复,我添加了最少的代码来重现错误。如果您需要一些特别的东西来理解这个问题,请询问。问候。 【参考方案1】:您可以在您的添加按钮上保留immediate="true"
并为其添加以下属性
update="addPanel"
或
您可以设置immediate="false"
并添加以下属性
process="@this" update="addPanel"
无论你选择什么选项,在你按下 Add 按钮后验证将被跳过,Ajax 将被执行,最后p:panelGrid
将被更新刷新disable
的disable
属性。
不要忘记对“编辑”按钮执行相同操作。
【讨论】:
以上是关于当我在 Primefaces 上打开带有必填字段的模态对话框时,如何阻止验证触发的主要内容,如果未能解决你的问题,请参考以下文章