当我在 Primefaces 上打开带有必填字段的模态对话框时如何停止触发验证
How to stop Validation from firing when I open modal dialog with required fields on Primefaces
我无法理解这种特殊情况的 JSF 生命周期。
我正在尝试使用 Primefaces 6.0 开发一个简单的模态 CRUD,但我遇到了 add/edit 模态行为的问题。
我想要完成的是:
添加
- 点击添加按钮
- Add/Edit 对话框打开
- InputText“field1”被禁用=false
编辑
- 单击编辑按钮
- Add/Edit 对话框打开
- InputText“field1”被禁用=true
为此,我将“field1”disabled属性链接到我的 bean 上的 editMode 变量。
当我单击“添加”按钮时,链接操作 initAddRubro 被触发并设置 editMode = false(假设默认情况下为 true)。
问题是,当我在没有设置 immediate=true 的情况下单击“添加”按钮时,Add/Edit 模态 window 的验证被触发(Field1 是必需的=true).
如果我在添加按钮上使用 immediate=true 然后禁用 属性 不会刷新。
面豆
@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" height="200" 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>
感谢任何帮助。
提前致谢。
娟.-
您可以在添加按钮上保留 immediate="true"
并向其添加以下属性
update="addPanel"
或
您可以设置immediate="false"
并添加以下属性
process="@this" update="addPanel"
无论您选择什么选项,在您按下添加按钮后验证都将被跳过,Ajax 将被执行,最后 p:panelGrid
将更新刷新 disable
属性 p:inputText
.
不要忘记对“编辑”按钮执行相同的操作。
我无法理解这种特殊情况的 JSF 生命周期。
我正在尝试使用 Primefaces 6.0 开发一个简单的模态 CRUD,但我遇到了 add/edit 模态行为的问题。
我想要完成的是:
添加
- 点击添加按钮
- Add/Edit 对话框打开
- InputText“field1”被禁用=false
编辑
- 单击编辑按钮
- Add/Edit 对话框打开
- InputText“field1”被禁用=true
为此,我将“field1”disabled属性链接到我的 bean 上的 editMode 变量。
当我单击“添加”按钮时,链接操作 initAddRubro 被触发并设置 editMode = false(假设默认情况下为 true)。
问题是,当我在没有设置 immediate=true 的情况下单击“添加”按钮时,Add/Edit 模态 window 的验证被触发(Field1 是必需的=true).
如果我在添加按钮上使用 immediate=true 然后禁用 属性 不会刷新。
面豆
@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" height="200" 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>
感谢任何帮助。 提前致谢。
娟.-
您可以在添加按钮上保留 immediate="true"
并向其添加以下属性
update="addPanel"
或
您可以设置immediate="false"
并添加以下属性
process="@this" update="addPanel"
无论您选择什么选项,在您按下添加按钮后验证都将被跳过,Ajax 将被执行,最后 p:panelGrid
将更新刷新 disable
属性 p:inputText
.
不要忘记对“编辑”按钮执行相同的操作。