Работа с псевдонимами и контролем xpages, как? - PullRequest
0 голосов
/ 06 ноября 2018

в моем приложении у меня есть радиогруппы со значениями псевдонима |

в режиме чтения. Я хочу отобразить их в поле ввода и изменить атрибут readonly. элемент управления имеет привязку данных к классам Java, например значение = "# {matterBean.matter.idType}"

как мне лучше всего преобразовать псевдонимы в значения?

ключевые слова теперь хранятся в документах Notes.

Должен ли я создать какой-то класс конвертеров и определить собственный конвертер для элемента управления поля редактирования?

пример кода:

<xp:radioGroup 
                        id="rgRelStudy"
                        value="#{matterBean.matter.busStudy}"
                        disabled="#{!matterBean.matter.editable}"
                        styleClass="radio-spacing" readonly="true">
                        <xp:this.defaultValue><![CDATA[#{javascript:getKeywordDefault("intakeStudy")}]]></xp:this.defaultValue>

                        <xp:selectItems>
                            <xp:this.value><![CDATA[${javascript:return getKeywordValues("intakeStudy");}]]></xp:this.value>
                        </xp:selectItems>
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="partial" refreshId="pnlUpdate">
                            <xp:this.script><![CDATA[var e = arguments[0] || window.event;
e = dojo.fixEvent(e);
if (e.target.type != "radio") {
    e.preventDefault();
    dojo.query("input",e.target).forEach(function(inputNode){
        dojo.attr(inputNode,"checked",!(dojo.attr(inputNode,"checked")));
    });
}
return true;]]></xp:this.script>
                            <xp:this.onComplete><![CDATA[XSP.partialRefreshGet('#{id:pnlCollegeContainer}', {
    onComplete: function () {
        XSP.partialRefreshGet('#{id:pnlResidenceContainer}');
    }
});]]></xp:this.onComplete>
                        </xp:eventHandler>
                    </xp:radioGroup>

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я пытался воспроизвести проблему, с которой вы столкнулись, но я либо неправильно понимаю, либо что-то еще происходит с вашей стороны, потому что это работает так, как ожидалось для меня. Если вы рассматриваете этот рабочий код, у вас есть 2 кнопки, которые переключают радиогруппу в режим чтения или нет. В режиме только для чтения отображается только метка, связанная с проверенными значениями, но не остальные.

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" style="padding: 20px"
    beforePageLoad="#{javascript:viewScope.readonly=false}">

    <xp:div id="theThing">
        <xp:button value="Make readonly" id="buttonReadOnly"
            rendered="#{not viewScope.readonly}">
            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="theThing"
                action="#{javascript:viewScope.readonly=true}" />
        </xp:button>

        <xp:button value="Make editable" id="buttonEditable"
            rendered="#{viewScope.readonly}">
            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="theThing"
                action="#{javascript:viewScope.readonly=false}" />
        </xp:button>

        <hr />

        <xp:radioGroup id="rgRelStudy" value="#{viewScope.relStudy}"
            styleClass="radio-spacing" readonly="#{viewScope.readonly}"
            defaultValue="o">
            <xp:selectItems value="${javascript:['apple|a', 'orange|o', 'banana|b']}" />

            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="pnlUpdate" />
        </xp:radioGroup>
    </xp:div>

    <hr />

    <xp:div id="pnlUpdate">
        <h3>The radio value (not label)</h3>
        <xp:text value="#{viewScope.relStudy}" />
    </xp:div>

</xp:view>
0 голосов
/ 06 ноября 2018

Компонент Computed Field тоже будет работать. Вместо пользовательского конвертера (предполагая, что это единственное место, где он используется), я бы установил отображаемое свойство и использовал пользовательский метод в классе Java, например, getIdTypeValues() и сопоставьте с этим. Принимая во внимание, что он используется только в режиме чтения, вы можете использовать метод с помощью UIViewRootEx2 view = (UIViewRootEx2) resolveVariable("view");if (view.isRenderingPhase()) {....}. Таким образом, он будет запускаться только один раз, во время фазы ОТВЕТА НА РЕНДЕР.

...