0

ページに入力テキスト、コマンド リンク、ログアウト イメージがあります。入力テキストに「必須」を使用すると、コマンド リンクが機能しません。それ以外の場合は正常に動作します。

これが私のコードです:

<p:commandLink action="#{loginForm.logout}">
    <p:graphicImage value="images/logout.png" alt="Logout" style="width: 50px;height: 50px;" title="Logout"/>
</p:commandLink>
<p:inputText id="fname" required="true"/>
4

2 に答える 2

1

コマンド リンクとボタンは、デフォルトでフォーム全体を送信します。この場合、入力フィールドは検証されており、「このフィールドは必須です」という検証エラーが発生しています (<p:messages autoUpdate="true">サーバー ログに注意を払っていた場合や注意を払っていた場合は、これに気付くはずです)。

ただし、 logout コマンドは完全に独立しているようで、同じ形式の他のすべての入力は logout コマンドとはまったく関係ありません。

推奨される順にいくつかの解決策があります。

  1. logout コマンドを独自の形式にします。

    <h:form>
        <p:commandLink value="Logout" ... />
    </h:form>
    <h:form>
        Other form.
    </h:form>
    

    これにより、設計は技術的にも意味的にも最も理にかなっています。


  2. ログアウト コマンドに、サブミット時にそれ自体のみを処理するように指示します。

    <p:commandLink value="Logout" process="@this" ... />
    

    @formこれは、つまり「フォーム全体」を意味するデフォルトです。これは、何らかの理由で別のフォームを使用できない場合にのみ使用してください (たとえば、CSS の設計が不十分であったり、基本的な HTML/CSS に精通していないなどの理由で)。


  3. 属性を悪用しimmediateます。

    <p:commandLink value="Logout" immediate="true" ... />
    

    これにより、属性を持たないすべての入力がバイパスされます。ただし、検証を優先するために属性を必要とする入力immediateが実際にある場合、これは失敗します。immediate

于 2013-08-01T12:32:38.953 に答える