Java 在JSF+中重置表单之前,检查输入的一些必填输入字段;素面

Java 在JSF+中重置表单之前,检查输入的一些必填输入字段;素面,java,javascript,jsf,primefaces,Java,Javascript,Jsf,Primefaces,我在使用PrimeFaces实现一种机制来检查JSF表单中的强制输入字段时遇到了一个问题,该机制在提交表单之前是否由用户填写 我在InputExts中使用了required=“true”机制,用于在提交之前检查并触发自定义消息,以提示用户在必填字段中输入一些值,例如: <p:inputText id="exp" required="true" requiredMessage="#{lang.dailyCurrencyValues_exp_req_txt}" value="#{marketD

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

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

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

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

但是,如果用户没有输入所有必填字段并按下submit按钮,则表单将给出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”字段是否已填充的信息

你诚挚的


法鲁克

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


...
@ManagedBean
@请求范围
公共类MrBean{
公共无效剂量测定法(){
//做你的事
RequestContext=RequestContext.getCurrentInstance();
execute(“document.getElementById(“myForm”).reset()”;
}
}

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

public String submit() {
    // ...

    return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
}

也许你可以试着这样做

 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更新表单或您需要的部分创建上下文实例后,我没有找到执行预定义函数。我该怎么办?@FarukPostacioglu我忘了提到RequestContext仅在PrimeFaces v3.0RequestContext中可用,因为我可以声明实例,但functiom的类不可用。您认为我该怎么办?是否有其他方法可以从backingBean中重置页面?@FarukPostacioglu检查您是否导入了正确的包
org.primefaces.context.RequestContext
 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;
    }
    }