私はこの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() がエラーを検出して例外をキャッチすると、何かが起こっています。
何か案は?