Xpages 使用UIDialog的Xpage组件,UIDialog不会呈现其子级

Xpages 使用UIDialog的Xpage组件,UIDialog不会呈现其子级,xpages,xpages-extlib,Xpages,Xpages Extlib,我正在尝试为我的公司开发一个组件,它应该有一个集成的对话框。创建组件很容易,直到我用对话框切中要害。我想为我的组件使用com.ibm.xsp.extlib.component.dialog.UIDialog,因为它有一些我想要使用的好特性,所以不能使用ClientSideDojo创建我自己的对话框 通常,在向另一个组件添加组件时,我使用component.getChildren().add(MyNewComp),但在尝试此代码时: public class myComponentWithADia

我正在尝试为我的公司开发一个组件,它应该有一个集成的对话框。创建组件很容易,直到我用对话框切中要害。我想为我的组件使用
com.ibm.xsp.extlib.component.dialog.UIDialog
,因为它有一些我想要使用的好特性,所以不能使用ClientSideDojo创建我自己的对话框

通常,在向另一个组件添加组件时,我使用
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与com.ibm.xsp.extlib.component.dialog.UIDialog$PopupContent不兼容

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

注意:我还试图通过一个按钮向标准的
中的
中“注入”一些内容,就像在his中一样。代码:

var对话框:com.ibm.xsp.extlib.component.dialog.UIDialog=
getComponent('extlibdialog');
如果(dialog.getChildren().size()>0){
dialog.getChildren().clear();
} 
var TextField:com.ibm.xsp.component.xp.xspouttext=new com.ibm.xsp.component.xp.xspouttext();
TextField.setTitle(“测试”);
setId(“testTextField”);
TextField.setValue(“这是新内容”

”; dialog.getChildren().add(TextField);

此代码适用于对话框外部的标准
,但不适用于对话框本身或对话框内部的面板。

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

因此,您需要在该事件中运行代码(mobile now,无法检查代码是否已公开)

方案B:使用一个由rest控件支持的Dojo对话,这样您就可以来回传输您需要的任何数据


警告:弹出对话框是从桌面应用程序移植过来的UI概念。他们与网络应用程序格格不入,大多不在手机上工作。考虑和内联窗体替代(或向导)

但如果我创建一个自定义组件,在其中添加udiLax组件,然后向其中添加一些子,那么当客户端上的XSP.OpenDeAudio()被调用时,为什么不呈现它们呢?如果没有子组件,则必须在何处添加要在对话框中显示的所有组件。我可以在显示对话框时运行SSJS,然后我可以在对话框中获得所需的一切,但这对我的组件没有帮助。您可以在XPage的源代码中定义子静态。在我的组件中做什么?声明它们为静态和/或final没有任何帮助,而不是代码。加成为什么要手动创建子项?我不清楚。只需在设计时将它们作为常规的XPages控件组合。此组件将成为我们公司ControlLibrary的一部分,并应集成到我们的所有应用程序中。因此,除非有人发明了一些东西来共享UpdateSite上的CustomControls,否则我必须在(java/jsf)中创建组件,并将它们作为库共享。我的问题中关于SSJS的部分只是一个注意事项,我尝试了一些不同的方法将内容注入到对话框控件中,但没有成功
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);