1

キース・ストリックランドの例に基づいて、XPages用のJSFライブラリコントロールを構築しようとしています。

http://xprentice.gbs.com/A55BAC/keithstric.nsf/default.xsp?documentId=82770C11FA7B9B21852579C100581766

DatePickerコントロールがアタッチされたInputBoxコントロールを作成する関数を作成しようとしています。

これが私が試したコードです:

    XspInputText inputText = new XspInputText();
    inputText.setId("inputText1");

    DateTimeConverter converter = new DateTimeConverter();
    converter.setType("date");
    inputText.setConverter(converter);
    XspDateTimeHelper dateTimeHelper = new XspDateTimeHelper();

    dateTimeHelper.setId("dateTimeHelper1");
    inputText.getChildren().add(dateTimeHelper);
    inputText.setRendered(true);
    this.getChildren().add(inputText);

InputTextコントロールはレンダリングされますが、Converter、Validator、およびDatePickerボタンはレンダリングされません。

こんにちはキースからの答えは問題を解決しました、しかし今私は別のものを持っていました。exlibからfromtableにinputtextを追加しようとしました。「DateTimePicker」の周りにフォームテーブルがないと正しくレンダリングされますが、フォームテーブルを使用するとテキストフィールドとしてのみレンダリングされます。

完全なコードは次のとおりです。

    public class Libcontrol extends UIComponentBase implements FacesComponent {

            private static final String RENDERER_TYPE = "de.chris.Libcontrol ";
            private static final String COMPONENT_FAMILY = "de.chris";

            public void CommonContactInfo() {
                    setRendererType(RENDERER_TYPE);
            }

            @Override
            public String getFamily() {
                    return COMPONENT_FAMILY;
            }



            @SuppressWarnings("unchecked")
            public void initBeforeContents(FacesContext arg0) throws FacesException {


                    UIFormTable table = new UIFormTable();
                    table.setId("mytable");
                    table.setDisableRowError(false);
                    table.setDisableErrorSummary(true);
                    table.setLabelPosition("left");

                    UIFormLayoutRow row = new UIFormLayoutRow();
                    row.setId("myrow");
                    row.setLabel("DATEROW");

                    XspInputText inputText = new XspInputText();
                    inputText.setId("inputText1");

                    DateTimeConverter converter = new DateTimeConverter();
                    converter.setType("date");
                    inputText.setConverter(converter);
                    XspDateTimeHelper dateTimeHelper = new XspDateTimeHelper();

                    dateTimeHelper.setId("dateTimeHelper1");
                    inputText.getChildren().add(dateTimeHelper);
                    inputText.setRendered(true);
                    this.getChildren().add(inputText);


                    row.getChildren().add(inputText);
                    table.getChildren().add(row);

                    this.getChildren().add(table);


            }

            public void buildContents(FacesContext arg0, FacesComponentBuilder arg1) throws FacesException {
            // Do Nothing
            }

            /**
            * This method must be present because we're implementing FacesComponent
            */
            public void initAfterContents(FacesContext arg0) throws FacesException {
            // Do nothing
            }
    }

問題がどこにあるのかわかりません、何かアイデアはありますか?

4

1 に答える 1

0

OK、あなたの問題を見つけたかもしれないと思います。XPage / Custom Control自体で、次のプロパティを設定します。

dojoParseOnLoad = true

dojoTheme = true

または、XPage / Custom Controlでこれらのプロパティを設定したくない場合は、super.encodeBegin()を呼び出す前に、レンダラーのencodeBeginで次の行を使用して設定できます。

//Here context = FacesContext or FacesContext.getCurrentInstance();
UIViewRootEx rootEx = (UIViewRootEx) context.getViewRoot();
rootEx.setDojoParseOnLoad(true);
rootEx.setDojoTheme(true);
于 2012-07-13T03:18:52.943 に答える