0

ログイン フォームを表示し、次のコード スニペットで使用できる複合コンポーネントを作成する必要があります。

<login:loginForm username="#{loginBean.username}" 
                 password="#{loginBean.password}" 
                 action="#{loginBean.login}"/>

@ViewScoped @ManagedBean私のloginBeanは、ゲッター、セッター、およびpublic String login()メソッドを使用した単純なシリアル化可能です。

これは私の複合コンポーネントです:

<body>
    <cc:interface>
        <cc:attribute name="username" required="true" type="java.lang.String" />
        <cc:attribute name="password" required="true" type="java.lang.String" />
        <cc:attribute name="action" targets="submit" required="true" method-signature="java.lang.String f()"/>
    </cc:interface>

    <cc:implementation>
        <h3><span xml:lang="en">Login</span> Daten </h3>
        <h:form>
            <div class="formblock">
                <fieldset>
                    <div>
                        <h:outputLabel value="Username" for="username"/>
                        <h:inputText id="username" value="#{cc.attrs.username}"/>
                    </div>

                    <div>
                        <h:outputLabel value="Passwort" for="password"/>
                        <h:inputSecret id="password" value="#{cc.attrs.password}"/>
                    </div>
                </fieldset>
            </div>
            <div class="buttons">
                <h:commandButton id="submit" value="Anmelden" accesskey="r" />
            </div>
        </h:form>
    </cc:implementation>
</body>

しかし、login:loginFormブラウザーで login.xhtml ページ (-snippet を含む) を開くと、jetty ログに次のエラーが表示されます。

Apr 29, 2012 11:59:49 PM org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage retargetMethodExpressions
SEVERE: Inner component submit not found when retargetMethodExpress

しかし、それはどういう意味ですか?私のコードのどこに間違いがありますか? 私はすでにaction属性を実装するための他のソリューションをいくつか試しましたが、成功しませんでした。

4

2 に答える 2

1

Ok。myfaces バージョン 2.1.7 にアップグレードすると、-stuff を使用しない単純なソリューションがtarget機能します。

<body>
    <cc:interface>
        <cc:attribute name="username" required="true" type="java.lang.String" />
        <cc:attribute name="password" required="true" type="java.lang.String" />
        <cc:attribute name="action" required="true" method-signature="java.lang.String f()"/>
    </cc:interface>

    <cc:implementation>
        <h3><span xml:lang="en">Login</span> Daten </h3>
        <h:form>
            <div class="formblock">
                <fieldset>
                    <div>
                        <h:outputLabel value="Username" for="username"/>
                        <h:inputText id="username" value="#{cc.attrs.username}"/>
                    </div>

                    <div>
                        <h:outputLabel value="Passwort" for="password"/>
                        <h:inputSecret id="password" value="#{cc.attrs.password}"/>
                    </div>
                </fieldset>
            </div>
            <div class="buttons">
                <h:commandButton action="#{cc.attrs.action}" value="Anmelden" accesskey="r" />
            </div>
        </h:form>
    </cc:implementation>
</body>
于 2012-04-29T23:17:43.840 に答える
0

h:form は NamingContainer であるため、target="submit" は正しくありません。したがって、そのコンポーネントに id を割り当て、target を "myForm:submit" などに変更する必要があります。

于 2012-05-01T01:45:42.753 に答える