0

統合されたダイアログが必要な会社用のコンポーネントを開発しようとしています。コンポーネントの作成は、ダイアログでポイントに到達するまでは簡単でした。使用したい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 incompatible with com.ibm.xsp.extlib.component.dialog.UIDialog$PopupContent.

また、Googleで解決策を見つけようとしましたが、openNTFで、同じ問題を抱えているが解決策がない人からのエントリしか見つかりませんでした。

注:また、 keithstricが彼のブログで行っているように、SSJS を使用してボタンを介して標準<xe:dialog><px:panel>内部にいくつかのコンテンツを「注入」しようとしました。コード:<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 に答える