1. ホーム
  2. forms

[解決済み] JSFでフォームアクションを定義する方法は?

2022-03-11 14:57:34

質問

Springセキュリティのデフォルトのログインフォームを置き換えるために、私はこの解決策を思いつきました。

<form name="f" action="../j_spring_security_check" method="POST" >
    <h:panelGrid columns="2">
        <h:outputText value="Username" />
        <h:inputText id="j_username" />
        <h:outputText value="Password" />
        <h:inputText id="j_password" />
    </h:panelGrid>
    <h:commandButton value="Login" />
</form>

しかし、プレーンな <form> タグを使用したい。 <h:form> Primefacesのコンポーネントは <h:form> . 使用方法 <h:form> の場合、フォームアクションはJSFによって自動的に現在のページに設定され、上記の例で私が設定した値にはなりません。どこでアクションをコード化すればいいのでしょうか? "../j_spring_security_check" 今すぐ の中に入れてみました。 <h:commandButton> を以下のようにしましたが、うまくいきません。

<h:form name="f">
    <h:panelGrid columns="2">
        <h:outputText value="Username" />
        <h:inputText id="j_username" />
        <h:outputText value="Password" />
        <h:inputText id="j_password" />
    </h:panelGrid>

    <h:commandButton value="Click here" action="../j_spring_security_check" />
</form>

エラーメッセージにつながる Unable to find matching navigation case with from-view-id '/login.xhtml' for action '../j_spring_security_check' with outcome '../j_spring_security_check' .

でナビゲーションケースを定義するのが唯一の方法なのでしょうか? faces-config.xml ? この単純なユースケースでビーンを使うのは避けたいのです。

どのように解決するのですか?

私にとっての最良の解決策は、デフォルトの <button> タグで代用します。典型的なボタンスタイルが適用されていないので(私の場合はPrimefacesを使用しています)、手動で設定しました。これが全体の結果です。

    <h:outputStylesheet library="primefaces" name="jquery/ui/jquery-ui.css" />
    <h:outputStylesheet library="css" name="login.css" />

    <div class="message">
        <c:if test="#{param.error == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
            <span class="error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
        </c:if>
    </div>



    <div class="login">
        <form action="../j_spring_security_check" method="post">
            <h:panelGrid columns="2">
                <h:outputText value="Username" />
                <h:inputText id="j_username" />
                <h:outputText value="Password" />
                <h:inputSecret id="j_password" />
            </h:panelGrid>

            <div class="submit">
                <button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only">
                    <span class="ui-button-text">Login</span>
                </button>
            </div>
        </form>
    </div>