【问题标题】:Checking some mandatory input fields are inputted before resetting the form in JSF + PrimeFaces在 JSF + PrimeFaces 中重置表单之前检查输入了一些必填字段
【发布时间】:2012-02-09 13:59:46
【问题描述】:

我在实现一种机制时遇到问题,该机制使用 PrimeFaces 检查 JSF 表单中的强制输入字段是否在提交表单之前由用户填写。

我在 inputTexts 中使用了 required="true" 机制,用于在提交之前检查和触发自定义消息,以提示用户在必填字段中输入一些值,例如:

<p:inputText id="exp" required="true" requiredMessage="#{lang.dailyCurrencyValues_exp_req_txt}" value="#{marketDataDefinitionProcesses.currencyType.explanation}"/> 

如果用户成功完成提交并留在同一页面,我的老板要求我重置页面。为了实现这一点,我在提交按钮上使用了 oncomplete="document.myForm.reset();" ,它成功地重置了表单和表单中的所有字段。

但是,如果用户没有输入所有必填字段并按下提交按钮,则表单将给出 requiredMessage 中指定的消息并重置表单和中的所有元素它。如果提交失败,我想防止这种情况重置值。我尝试实现一个 JavaScript 函数,该函数试图防止在未填写必填字段时重置表单。然而,我再次面临一个关于在我的表单中检索 元素值的问题。

<p:calendar id="dateValueId" value="#{marketDataDefinitionProcesses.currencyType.dateValue}" pattern="dd.MM.yyyy" required="true" requiredMessage="#{lang.dailyCurrencyValues_dateValueId_req_txt}"/>

我没有成功通过 JavaScript 检索日历元素值。

现在,我正在等待您的意见来解决这个问题。我认为,有关使用 JavaScript 或任何 JSF/PrimeFaces 元素检索有关 required="true" 字段是否已填充的信息的解决方案是选项。

此致……

法鲁克

【问题讨论】:

    标签: java javascript jsf primefaces


    【解决方案1】:

    也许你可以试试这个方法

     public class MarketDataDefinitionProcesses{
        private CurrencyType currencyType;
        Boolean createStatus;
    
    
          public String create(){
             if(service.checkData(currencyType)){
        //insert data
        //show statusMessage or not
        createStatus=Boolean.TRUE;
        reflesh(create,createStatus);
        }
       return null;
        }
        public void reflesh(CurrencyType preNextCreateCurrency,Boolean createStatus){
         preNextCreateCurrency = new CurrencyType();
         this.currencyType = preNextCreateCurrency ;
         RequestContext rc = RequestContext.getCurrentInstance();
         rc.update("form:id"); // if the inputText in the panelGrid, you can put the panelGrid id 
         createStatus = Boolean.FALSE;
        }
        }
    

    当用户提交数据时,页面需要一个新的实例,并使用 ReuqestContext 来更新表单或你需要的部分

    【讨论】:

      【解决方案2】:

      发布后发送重定向到同一视图。它将创建一个全新的请求,其中所有输入值都为空白或至少为请求/视图范围 bean 中定义的默认值。

      public String submit() {
          // ...
      
          return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
      }
      

      【讨论】:

        【解决方案3】:

        我认为您可以通过 PrimeFaces 的RequestContext 实现您的目标:

        <h:form id="myForm">
           ...
        </h:form>
        
        @ManagedBean
        @RequestScoped
        public class MrBean {
           public void doSomething() {
              // Do your thing
        
              RequestContext context = RequestContext.getCurrentInstance();
              context.execute("document.getElementById("myForm").reset()"); 
           }
        }
        

        【讨论】:

        • 创建上下文实例后,没有找到执行预定义函数。我该怎么办?
        • @FarukPostacioglu 我忘了说 RequestContext 仅在 PrimeFaces v3.0 中可用
        • RequestContext 在以前的版本中也可用,因为我可以声明实例但该函数的类不可用。
        • 你认为我应该怎么做?有没有办法找到另一种方法来完成从 backingBean 重置页面?
        • @FarukPostacioglu 检查你是否导入了正确的包org.primefaces.context.RequestContext
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        • 2013-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        相关资源
        最近更新 更多