我正在尝试为我的公司开发一个应该有一个集成对话框的组件。创建组件很容易,直到我用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>
,但不适用于对话框本身或其中的面板。
答案 0 :(得分:0)
当页面加载时,对话框不会预渲染,但是当您在XSP.openDialog(...)中实际调用它时
所以你需要让你的代码在那个事件中运行(现在移动,不能检查它是否暴露)。
计划B:使用由休息控制支持的Dojo对话,这样您就可以来回传输所需的任何数据。
提醒:弹出对话框是从桌面应用移植的UI概念。它们与Web应用程序不同,并且大部分不在移动设备上工作。改为考虑和内联形式(或向导)