0

<h:message for="" />JSFオブジェクトによると質問があります。私はJSF1.1(はい、残念ながら)myFacesプロジェクトを持っています。ラベル、inputText、メッセージホルダーを含む簡単なJSPファイルを用意しました。

<h:form id="sacLinkForm">
    <cblFaces:outputLabel for="dedicatedCashAccountNumber"
        value="#{appBundle.KUSTA_DEDICATED_CASH_ACCOUNT_NUMBER}"/>
    <t:inputText id="dedicatedCashAccountNumber"
        value="#{createController.modelFE.sacLink.dedicatedCashAccountNumber}"/>
    <h:message id="dedicatedCashAccountNumberError"
        for="dedicatedCashAccountNumber" />
</h:form>

また、簡単な検証方法を作成しました。

public static boolean validate(SACLink link) {
    boolean isError = false;
    FacesContext context = FacesContext.getCurrentInstance();
    FacesMessage message = new FacesMessage();
    message.setSeverity(FacesMessage.SEVERITY_ERROR);

    if (StringUtils.isEmpty(link.dedicatedCashAccountNumber)) {
        //MessageUtils.addErrorMessage("dedicatedCashAccountNumber", "Dedicated Cash Account Number is mandatory");
        message.setSummary("Field mandatory");
        message.setDetail("Dedicated Cash Account Number is mandatory");
        context.addMessage("sacLinkForm:dedicatedCashAccountNumber", message);
        isError = true;
    }
    return !isError;
}

私の問題は、sacLinkForm:dedicatedCashAccountNumberコンパイルされたJSPがid(fe _idJsp12:DynTab2:DynView2:tabK.....er:vKustaMa....Controller:sacLinkForm:dedicatedCashAccountNumber)を生成し、そのメソッドが属性にaddMessage対応していない可能性があるためです。h:message for=".."

h:messageしたがって、Javaが正しいオブジェクトを見つけることができなかったため、メッセージは正しく表示されません。h:messageJavaからメッセージを正しいものに設定する方法はありますか?JSF1.1ページで「一定」のコンポーネントIDを強制する方法はないと思います。

ありがとうございました。

4

1 に答える 1

4

JSFアクションメソッドで手動で検証を実行しないでください。JSF組み込みの検証機能を利用する必要があります。通常のJSFを使用する必要がありますValidator。そこからスローしたものはすべてValidatorException、正しいメッセージコンポーネントになります。

validate()そのメソッドを次のクラスに置き換えます。

public class AccountNumberValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if (StringUtils.isEmpty(value)) {
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("Field mandatory");
            message.setDetail("Dedicated Cash Account Number is mandatory");
            throw new ValidatorException(message);
        }
    }

}

次のように登録しfaces-config.xmlます。

<validator>
     <validator-id>accountNumberValidator</validator-id>
     <validator-class>com.example.AccountNumberValidator</validator-class>
</validator>

次のようにビューで使用します。

<t:inputText id="dedicatedCashAccountNumber"
    value="#{createController.modelFE.sacLink.dedicatedCashAccountNumber}"
    validator="accountNumberValidator" />

それでおしまい。検証(または変換)が失敗した場合、JSFアクションメソッドは呼び出されないことに注意してください。無意味なisError混乱も必要ありません。

于 2013-03-13T18:44:12.237 に答える