0

我正在尝试为我的公司开发一个组件,它应该有一个集成的对话框。创建组件很容易,直到我用 Dialog 说到点子为止。我想com.ibm.xsp.extlib.component.dialog.UIDialog为我的组件使用它,因为它有一些我想使用的不错的功能,所以用 ClientSideDojo 创建我自己的对话框不是一个选项。

Normaly 将组件添加到我使用的另一个组件component.getChildren().add(MyNewComp),但当我尝试此代码时:

public class myComponentWithADialog extends UIComponentBase implements FacesComponent {
    //...other Code...
    public void buildContents(FacesContext context, FacesComponentBuilder builder)
                throws FacesException {

          UIDialog dialog = new UIDialog();
            TypedUtil.getChildren(container).add(dialog);
            dialog.setStyleClass("dlgUserPref");
            dialog.setTitle("titelxyz");
            dialog.setId("TagDialog"); 

            UIPanelEx panel = new UIPanelEx();
            panel.setTagName("div");
            panel.setStyle("border:2px solid red;");
            panel.setStyleClass("lotusList lotusTags lotusRelatedTags");

            dialog.getChildren().add(panel);
            this.getChildren.add(dialog);
    }
  //....
}

在我的浏览器中调用时,我的面板未显示在对话框内,对话框XSP.openDialog('dialogClientId')显示但为空。

我已经尝试了其他几种方法,dialog.getPopupContent.getChildren().add()但后来我得到了错误:javax.faces.component.UIPanel incompatible with com.ibm.xsp.extlib.component.dialog.UIDialog$PopupContent

我也试图在谷歌上找到一个解决方案,但我只在openNTF找到了一个有同样问题但没有任何解决方案的人的条目。

注意:我还尝试通过 SSJS 按钮将一些内容“注入”到标准<xe:dialog><px:panel>内部,就像keithstric在他的博客中所做的那样。代码:<xe:dialog>

var dialog:com.ibm.xsp.extlib.component.dialog.UIDialog = 
   getComponent('extlibdialog');

    if(dialog.getChildren().size() > 0) {     
        dialog.getChildren().clear(); 
    } 

    var TextField:com.ibm.xsp.component.xp.XspOutputText = new com.ibm.xsp.component.xp.XspOutputText();
        TextField.setTitle("test");
        TextField.setId("testTextField");
        TextField.setValue("<p>This is the new Content</p>");

    dialog.getChildren().add(TextField);

此代码适用于<xp:panel>对话框外部的标准,但不适用于对话框本身或其中的面板。

4

1 回答 1

0

加载页面时不会预先呈现对话框,而是在 XSP.openDialog(...) 中实际调用它时

所以你需要让你的代码在那个事件中运行(现在移动,无法检查它是否暴露)。

计划 B:使用由休息控制支持的 Dojo 对话,这样您就可以来回传输所需的任何数据。

需要注意的是:弹出对话框是从桌面应用程序移植而来的 UI 概念。它们对于 Web 应用程序来说是陌生的,并且大多不能在移动设备中工作。考虑并内联表单(或向导)

于 2013-09-04T01:28:34.580 回答