使用UIDialog的Xpage组件,UIDialog不会渲染其子项

时间:2013-09-03 10:10:51

标签: xpages xpages-extlib

我正在尝试为我的公司开发一个应该有一个集成对话框的组件。创建组件很容易,直到我用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>内的<xe:dialog> keithstric在他blog。代码:

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>,但不适用于对话框本身或其中的面板。

1 个答案:

答案 0 :(得分:0)

当页面加载时,对话框不会预渲染,但是当您在XSP.openDialog(...)中实际调用它时

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

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

提醒:弹出对话框是从桌面应用移植的UI概念。它们与Web应用程序不同,并且大部分不在移动设备上工作。改为考虑和内联形式(或向导)