0

現在、JBoss AS 7.1 でプレーンな JSF を使用して PopUp を開発しており、ポップアップ クラスのレンダラーにコマンド ボタンを追加しようとしています。クラス Popup は UIPanel を拡張します。ポップアップは ah:form 内にあります。

ポップアップにボタンを追加するコード:

private static final String ID_FIELD_TAG = "id";
private static final String HTML_DIV_TAG = "div";

[...]

writer.startElement(HTML_DIV_TAG, component);
writer.writeAttribute(ID_FIELD_TAG, konstanten.getPopupFooterId(), ID_FIELD_TAG);
writer.write("\n");
if(popup.isShowDialogButtons()){
    HtmlCommandButton cancelButton = new HtmlCommandButton();
    component.getChildren().add(cancelButton);
    cancelButton.setId(konstanten.getPopupFooterCancelButtonId());
    cancelButton.setValue(popup.getCancelText());
    if (!popup.getCancelAction().equals("")) {
        String expression = "#{"+popup.getCancelAction()+"}";
        MethodExpression methodExpression = ExpressionHelper.EXPRESSION_HELPER.
            generateMethodExpression(expression, null,
                new Class<?>[] { ActionEvent.class });
        cancelButton.addActionListener(new MethodExpressionActionListener(
            methodExpression));
    } else {
        cancelButton.setOnclick("hidePopup('" + componentId + "')");
    }
    cancelButton.encodeAll(context);
}
writer.endElement(HTML_DIV_TAG);

ボタンは表示されますが、ページのリロードを除いて、クリックしても何も起こりません。

popup.getCancelAction() は「NameOfTheBean.NameOfTheMethod」を返します。

エラーメッセージはありません。

助けてくれてありがとう!

編集: HTMLCommandButton を HTMLCommandLink に置き換えて、フォームに問題があるかどうかを確認しようとしました。リンクは機能しているように見えますが、まだ何も呼び出されません。

4

1 に答える 1

0

問題は、ボタンが JSF コンポーネント ツリーに正しく追加されなかったことです。それらを子としてコンポーネントに追加し、encodeChildren() メソッドでそれらを無視しました。

誰かがより良い解決策を知っているなら、私はそれを知りたいので、この質問に答えることを躊躇しないでください!

于 2013-08-14T07:24:41.943 に答える