0

私はこのjsfコードを持っています

<h:form>
    <h:inputText value="#{agreement.serviceId}"/>
    <h:commandButton value="Enter" action="#{agreement.build}" />
    <h:form rendered="#{!agreement.valid}">
      <h:outputText value="Service id not valid. Please try again"/>
    </h:form>   
<h:form> 

これは、スコープ Bean のビルド メソッドです。

public String build(){
  try{
     ...//lots of backend logic
     valid = true;
     return "/agreementDetail.xhtml?faces-redirect=true";
  }catch(Exception e){
     valid = false;
     return null;
  }
}

基本的に、必要な動作は次のとおりです。

ユーザーは serviceId を入力します。このサービス ID が有効な場合、ユーザーは AgreementDetail.xhtml ページにリダイレクトされます。false の場合、ユーザーは main.xhtml ページに残り、「サービス ID が無効です...」というメッセージが表示されます。

これが起こっていることです:

ユーザーが正しいサービス ID を入力すると、すべてが正常に機能します。ユーザーが main.xhtml に戻って間違ったサービス ID を入力すると、エラーが正しく表示されます。しかし、ユーザーが正しいサービス ID を入力した場合、build() メソッドは実行されません。(これはロギングで確認しました)。

基本的に、ユーザーが間違った値を入力すると、ユーザーがサインオフして再度サインインしない限り、build() メソッドは二度と実行されません。明らかに、build() がエラーを検出して例外をキャッチすると、何かが起こっています。

何か案は?

4

1 に答える 1