2012-03-07 30 views
2

カップルのinputTextと一緒に、私がページ上に持っている必須コンポーネントの1つがp:fileUploadです。だから私は、提出をクリックすると、<p:message>require=trueを持つコンポーネント上に表示されますが、ユーザーが選択/pの検証方法fileUpload

enter image description here

を入力していなかった私は、赤いボックスRequiredを望んも次のアップロードコンポーネントに表示されます。ここで私が試したことがあります。

1。 p:fileUploadにrequired="true"と設定すると、実際には何も起こりません(これがバグかどうかはわかりません)。
2。私は以下の私が提出クリックしたときに何が本当に私は、validateFileUploadが全く呼び出されませんでしたアップロードを通過していない場合でも、起こりません

public void validateFileUpload(FacesContext context, UIComponent component, 
     Object value) throws ValidatorException { 
    if(value == null){ 
    FacesMessage message = new FacesMessage(); 
    message.setSeverity(FacesMessage.SEVERITY_ERROR); 
    message.setSummary("Error"); 
    message.setDetail("Required"); 
    throw new ValidatorException(message);  
    } 
} 

私のバリデータソース

で、 p:fileUploadvalidatorを入れて(わからないこれはバグがある場合)

3。私がsubmitをクリックすると、他のすべてが渡され、私のアクションメソッドに入ると、ファイルがnullかどうかを確認してからFacesMessageを返し、p:growlがそれを受け取るようにします。しかし、私はそれがユーザーに複数の検証レイヤーの感覚を与えるので、そのようには好きではありません。

pのより良い検証を行う方法はありますか?fileUpload

+1

わからないが、私の[最近の質問]の多分1(http://stackoverflow.com/q/9415 059/620338)が関連しています。 –

+0

@MattHandy:あなたの質問は以前見たことがあります。 'validator'属性と' f:validator'の両方を試しましたが、何も起こりません。 –

+0

問題が報告され、修正されました:http://code.google.com/p/primefaces/issues/detail?id=3680 –

答えて

2

同じ問題を抱える人にとっては、ウィザードを作成するときにこの問題が発生しました。私が使用した回避策は、ビューイングされたBeanのフィールドにアップロードされたファイルを格納し、次のステップにナビゲートしようとするときにこのフィールドをチェックすることでした。

ウィザードタグ:

<p:wizard id="importBankAccountLogWizard" 
      widgetVar="importBankAccountLogWizard" 
      flowListener="#{bankAccountLogImportBean.onFlowProcess}"> 

ファイルアップロードタグ(私がレンダリングされているとupdate属性は、メッセージが表示されるように設定し、最初のアップロード後に隠されるアップロード):

<p:fileUpload id="bankAccountLogFileInput" 
             fileUploadListener="#{bankAccountLogImportBean.setBankAccountLogFile}" 
             rendered="#{bankAccountLogImportBean.renderFileUploadInput}" 
             mode="advanced" 
             update="importBankAccountLogWizard" 
             auto="true" 
             sizeLimit="1000000" /> 

豆:

public void setBankAccountLogFile(FileUploadEvent event) 
{ 
    importFile = event.getFile(); 
    FacesMessage msg = new FacesMessage(Localization.g("FILE_HAS_BEEN_UPLOADED", event.getFile().getFileName())); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

public String onFlowProcess(FlowEvent event) 
{ 
    if("bankAccountLogImportInputTab".equals(event.getOldStep()) && 
     importFile == null) 
    { 
     FacesMessage msg = new FacesMessage(Localization.g("UPLOAD_A_FILE_TO_CONTINUE")); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return event.getOldStep(); 
    } 

    return event.getNewStep(); 
} 
関連する問題