2012-01-13 5 views
2

JSF 양식을 사용하여 JSF 양식의 필수 입력 필드를 검사하는 메커니즘을 구현하는 데 문제가 있습니다. 형태. 내가 확인하고 이와 같은 필수 필드에 어떤 값을 입력하는 사용자에게 메시지를 표시하기위한 제출하기 전에 사용자 정의 메시지를 발사에 대한 inputTexts에서 = "true"를 메커니즘이 필요 을 사용했다JSF + PrimeFaces에서 양식을 재설정하기 전에 일부 필수 입력 필드를 확인합니다.

:

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

내 보스가 사용자가 성공적으로 제출을 완료하고 동일한 페이지에 머물러있는 경우 페이지 재설정을 요청했습니다. 이를 구현하기 위해 나는 oncomplete = "document.myForm.reset();"을 사용했다. 제출 버튼에을 입력하면 양식의 모든 입력란과 입력란이 성공적으로 재설정됩니다.

그러나 사용자가 모든 필수 입력란을 입력하지 않고 제출 버튼을 누르면 양식에 필수 메시지에 지정된 메시지가 제공되고 양식 및 모든 요소가 재설정됩니다. 제출이 실패 할 경우 값을 재설정하기 위해이 상황을 방지하고 싶습니다. 필자는 필수 필드가 채워지지 않은 경우 양식을 다시 설정하지 못하도록 막으려는 JavaScript 함수를 구현하려고했습니다. 그러나 다시 한 번 요소 값을 검색하는 것과 관련하여 문제가 있습니다.

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

자바 스크립트로 캘린더 요소 값을 검색하지 못했습니다.

이제이 문제를 해결하기 위해 귀하의 의견을 기다리고 있습니다. 내 생각에, required = "true" 필드가 채워 졌는지 여부에 대한 정보를 검색하는 JavaScript 또는 JSF/PrimeFaces 요소를 사용하여 달력 값을 검색하는 방법에 대한 해결책은 옵션입니다.

너의 감사합니다 ...

파 루크

답변

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

후 필요 떼어하는 수 컨텍스트 인스턴스를 만들 때 미리 정의 된 함수를 찾지 못했습니다. 어떻게해야합니까? –

+0

@FarukPostacioglu PrimeFaces v3.0에서만 RequestContext를 사용할 수 있다는 것을 잊어 버렸습니다. –

+0

RequestContext는 인스턴스를 선언 할 수 있지만 functiom의 클래스를 사용할 수 없으므로 이전 버전에서도 사용할 수 있습니다. –

2

게시물 후 같은보기로 리디렉션을 보냅니다. 요청/뷰 범위 bean에서 정의 된 모든 입력 값을 공백으로 또는 최소한 기본값으로 완전히 새로운 요청을 작성합니다.

public String submit() { 
    // ... 

    return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true"; 
} 
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를 사용하거나

관련 문제