Требуется текстовое поле проверки xpages dojo

У меня есть текстовое поле проверки додзё на моей странице xpage с вычислением требуемого свойства (вычисление динамически), как показано ниже.

var syn = getComponent("SynCboxGrp").getValue();
if (syn == "Yes")
{return true;
}else{
    return false;
}

Здесь компонент SynCboxGrp является переключателем. Текстовое поле требуется в зависимости от значения переключателя. Но он не работает должным образом. Изменение значения переключателя не меняет требуемого поведения.

Ценю любую помощь


Обновить

Спасибо stwissel, Перу Хенрику Лаустену и Эрику. У меня есть только этот ssjs в обязательном свойстве

<xe:djValidationTextBox id="UBOCAgent"                      value="#{dsRacDoc.UBOCAgent}"                       disableClientSideValidation="true">
<xe:this.required><![CDATA[#{javascript:var syn = getComponent("SynCboxGrp").getValue();

if (syn == "Yes")
{
    return true;
}else{
    return false;
}
}]]></xe:this.required>
</xe:djValidationTextBox>  

Я также попробовал этот код частичного обновления для моей радиокнопки onclick event XSP.partialRefreshGet("#{id:UBOCAgent}");

Это все еще не меняет поведение. Он работает на основе начального значения переключателя. С другой стороны, поскольку это запрос на получение, он обновляет содержимое поля с сервера. Я также попробовал отключить проверку клиента по предложению Эрика, но это не помогло.

Эрик, я также стараюсь использовать CSJS везде, где это возможно, но в этом случае требуемое свойство имеет только опцию SSJS. Так что не знаю, как попробовать CSJS. Должен ли я попробовать создать собственное поле додзё вместо использования поля из библиотеки enttension? Если это так, я не уверен, как вычислить необходимое свойство для этого. Если вы можете помочь мне с примером кода, это было бы здорово. Спасибо за ваше время.


person lense    schedule 15.11.2012    source источник
comment
Пожалуйста, больше кода, полный (не) рабочий пример. И код на стороне сервера не выполняется при изменении на стороне клиента.   -  person stwissel    schedule 15.11.2012
comment
Вы установили переключатель для частичного обновления текстового поля (чтобы он повторно вычислил требуемое свойство)? Пока Стефан пишет, добавьте еще немного своего кода, чтобы было проще ответить на ваш вопрос.   -  person Per Henrik Lausten    schedule 15.11.2012
comment
Спасибо, stwissel, Пер Хенрик Лаустен.   -  person lense    schedule 16.11.2012


Ответы (2)


Вы выполняете partialRefreshGet, который обновляет текстовое поле проверки Dojo. Но вы никогда не отправляете обратно обновленное значение из радио, поэтому значение на стороне сервера для переключателя по-прежнему остается начальным значением. Следовательно, required по-прежнему ложно.

Убедитесь, что разметка, когда требуется, является истинной в текстовом поле Dojo Validation, но проверка запускается на стороне клиента, поэтому в разметке должен быть атрибут, которым вы можете управлять через CSJS, если это ваш предпочтительный маршрут.

Есть ли у вас особые проблемы с задержкой, которые вам нужно обойти? Ответив на этот и другой вопрос о поиске в базе данных одним нажатием кнопки, вы столкнетесь с несколькими проблемами. Я не знаю, насколько вы опытны в разработке XPages, но я бы не рекомендовал этот подход без хорошего понимания вывода на стороне клиента и дерева компонентов на стороне сервера. Начальная загрузка страницы вашего XPage также будет медленнее, а размер HTML, передаваемого в браузер, будет больше из-за количества CSJS, переданного в браузер.

Я бы порекомендовал использовать встроенное частичное обновление, за исключением ситуаций, когда сеть между браузером и сервером является серьезной проблемой, и только затем возвращаться к кодированию собственного частичного обновления, публикуя подмножество данных. По моему опыту, его проще и быстрее разрабатывать, легче отлаживать и он более гибкий.

Для этого конкретного сценария, независимо от того, кодируете ли вы частичное обновление самостоятельно или используете встроенную функциональность, есть один момент, в котором я не уверен. После установки проверки в текстовом поле Dojo Validation эта проверка выполняется на стороне клиента и может повлиять на любую попытку отменить установку требуемого свойства путем отправки на сервер. Я не проверял, поэтому не могу быть уверен.

person Paul Stephen Withers    schedule 16.11.2012

Одно из двух:

  1. как упоминалось ранее, чтобы инициировать изменение значения SSJS, обеспечьте частичное (как минимум) обновление элемента, содержащего указанный выше код; можно сделать с элементом контейнера. Кроме того, проверьте, установлен ли параметр disableClientSideValidation вашего поля (представление «Все свойства»).
  2. преобразовать ваш код SSJS (который просто возвращает двоичную оценку значения «Да» или иным образом, я предполагаю «Нет») в CSJS

В последнее время, после основной разработки моего текущего проекта, я начал отдавать предпочтение подходу CSJS ради уменьшения количества обратных вызовов на стороне сервера; особенно в ситуациях, когда отображение/рендеринг компонента - это все, чего я пытаюсь достичь. Если вы пойдете по этому пути, помните, что dojo.byId("#{id:myControlsServerNameHere}").value (для текстового поля см. ниже для очистки значения переключателя) в сочетании с настройкой display или visible Свойства CSS могут быть очень удобными. Как описано в документах, если вы хотите, чтобы он существовал на странице, но не отображался (для целей форматирования также можно сохранить значение по умолчанию), перейдите по маршруту видимости, в противном случае отобразите свойство.

Очистка CSJS значений радио, которые я сейчас использую, выглядит следующим образом:

var result=null;
for(i=0; i<document.forms[0].elements.length;i++){
    if(document.forms[0].elements[i].name=="#{id:serverNameOfRadioElement}"){
        if(document.forms[0].elements[i].checked == true){
            result=document.forms[0].elements[i].value;
            break;
        }
    }
}
//then handle your result, either with an if, or switch statement

Надеюсь это поможет. Если у вас возникли проблемы с чем-то еще, отправьте сообщение с дополнительным кодом, чтобы получить более полную картину.

person Eric McCormick    schedule 15.11.2012