9

Web ページの作成に取り組んでいますが、コマンド ボタンを 2 回押す必要があることに気付きました。どのコマンド ボタンにも同じ問題があるため、そのうちの 1 つにアクション リスナーを追加して、何かが見えるかどうかを確認することにしました。

<h:form id="formP">
    <p:commandButton id="temp" value="photos" actionListener="#{viewBacking.debugBreakpoint()}" action="userPhoto" />
</h:form>

バッキング Bean には

public void debugBreakpoint() {
    int i = 0;
    i++;
}

残念ながら、これは役に立ちます。2回目のプレスの後にのみブレークポイントにヒットします。どこかのフィールドが検証に合格していないと思われますが、正確に何が問題なのかを検出する方法が必要です-なぜ2番目のプッシュが必要なのですか? Glassfish でオンにできるオプションや、デバッグ情報のダンプを確認できるその他のオプションはありますか? すべてが安定するまでダンプを無視して、最初にボタンを押したときに何が起こっているかを正確に確認できます。

私が使用できるそのようなツールはありますか?

4

5 に答える 5

14

これは、指定された の親コンポーネントが<h:form>別のコマンド ボタン/リンクによってレンダリング/更新されたときに発生する可能性があります<f:ajax>。指定されたフォームは、最初にフォームを送信した後にのみ返されるビューステートを失います。その後の送信は、通常どおりに機能します。これは、 JSF issue 790で説明されているJSF JS API のバグが原因であり、今後の JSF 2.2 で修正されます。

で指定さ<f:ajax>れた のクライアント ID を明示的に含めるには、別のコマンド ボタン/リンクを修正する必要があります。<h:form>render

<f:ajax render=":somePanel :formP" />

もう 1 つの方法は、これ<f:ajax>を PrimeFacesに置き換える<p:commandLink><p:commandButton>、すべてのフォームのクライアント ID を明示的に含める必要がないようにすることです。つまり、PrimeFaces 独自の JS API には、この修正が既に組み込まれています。

于 2012-05-30T13:31:53.190 に答える
0

または、この ajax="false" プロパティを commandButton に追加できます

<p:commandButton ajax="false" action="#{userController.create}" value="#{bundle.CreateUserSaveLink}"></p:commandButton>
于 2013-01-25T06:00:25.340 に答える
0

追加すると、 それが整理されると思いevent="onclick"ます。p:commandbutton

于 2012-05-30T10:59:50.827 に答える