首页 文章

在重置JSF PrimeFaces中的表单之前,检查一些必需的输入字段

提问于
浏览
2

我在实现一个机制来检查JSF表单中的强制输入字段时遇到问题,使用PrimeFaces在提交表单之前由用户填写或不填写 .

我在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元素检索日历值的解决方案是检索有关所需= "true"字段/是否已填充的信息的选项 .

此致...

法鲁克

3 回答

  • 2

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

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

    我认为你可以通过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()"); 
       }
    }
    
  • 0

    也许你可以尝试这种方式

    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更新表单或您需要的部分

相关问题