0

我目前正在 JBoss AS 7.1 上开发一个带有纯 JSF 的弹出窗口,并且我正在尝试在弹出类的渲染器中添加一个命令按钮。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”。

没有错误消息。

谢谢您的帮助!

编辑:我尝试用 HTMLCommandLink 替换 HTMLCommandButton 以查看表单是否存在问题。该链接看起来可以正常工作,但仍然没有调用任何内容。

4

1 回答 1

0

问题是,按钮没有正确添加到 JSF 组件树中。我已将它们作为子组件添加到组件中,并在 encodeChildren() 方法中忽略它们。

如果有人知道更好的解决方案,我很想知道,所以请不要犹豫,回答这个问题!

于 2013-08-14T07:24:41.943 回答