当我在 Primefaces 上打开带有必填字段的模态对话框时如何停止触发验证

How to stop Validation from firing when I open modal dialog with required fields on Primefaces

我无法理解这种特殊情况的 JSF 生命周期。

我正在尝试使用 Primefaces 6.0 开发一个简单的模态 CRUD,但我遇到了 add/edit 模态行为的问题。

我想要完成的是:

添加

  1. 点击添加按钮
  2. Add/Edit 对话框打开
  3. InputText“field1”被禁用=false

编辑

  1. 单击编辑按钮
  2. Add/Edit 对话框打开
  3. 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.

不要忘记对“编辑”按钮执行相同的操作。