Xpage, createForm=false отключает события SSJS для ссылок?

Я прошу это просто для ясности: я случайно установил для свойства createForm значение false. Затем я ожидал, что событие ссылки, которое должно открыть другую страницу, больше не будет работать. Является ли это предполагаемым поведением событий SSJS, например. в ссылках при отключении создания форм?


person Oliver Busse    schedule 07.04.2013    source источник


Ответы (2)


Как упоминает Пер, для всех событий требуется форма: если они полностью обновляются, то странице нужна форма для публикации, чтобы вызвать перенаправление; если они являются частичным обновлением, форма определяет содержимое AJAX POST.

Среда выполнения XPages включает поддержку компонента формы, но он не включен в палитру компонентов (и его нельзя добавить с помощью настроек конструктора), поэтому единственный способ добавить его на страницу — напрямую отредактировать исходный XML. Например:

<xp:form>
    <xp:link id="exampleLink" text="Example Text">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:// event code}]]></xp:this.action>
        </xp:eventHandler>
    </xp:link>
</xp:form>

Есть (как минимум) две причины, почему этот компонент полезен:

  1. Это может повысить производительность. Если страница содержит различные области, которые функционально различны, другими словами, событие в одной части страницы не должно знать данные в любых других частях страницы. страница - затем обертывание каждого раздела в отдельный компонент формы приводит к тому, что каждое событие публикует только данные, которые содержатся внутри той же формы, что и компонент, который запускает событие. Ваш вопрос указывает на то, что ссылка, которая прервалась, когда вы установили createForm на false, должна направить пользователя на другую страницу; поэтому вполне вероятно, что этому событию не нужно знать ни о каких значениях поля, потому что пользователь все равно покидает текущую страницу. Если это так, оберните эту ссылку в ее собственную форму, а любые поля в отдельную форму, и ссылка будет работать немного быстрее, потому что браузеру не нужно публиковать данные поля... только идентификатор самой ссылки.
  2. Это может обеспечить гибкость стиля. Обычно разработчик получает, отдельно от фактических требований конечного пользователя, предварительно определенный CSS от дизайнера, не знакомого с Domino, например, если дизайн сайта отдан на аутсорсинг. , либо должны соответствовать рекомендациям по корпоративному стилю. Это часто становится источником напряжения, когда дизайнер делает определенные предположения, которые, на первый взгляд, несовместимы с разметкой, которую генерирует Domino. Одним из наиболее распространенных примеров этого является наличие на сайте функций поиска, потому что у большинства веб-разработчиков будет одна форма для поиска и отдельная одноуровневая форма для любых других полей. Это может увеличить стоимость проекта, когда либо дизайнеру, либо разработчику приходится пересматривать таблицу стилей, которую дизайнер уже разработал, для учета единого тега формы, окружающего все содержимое. Короче говоря, подавление элемента формы по умолчанию и явное указание компонентов формы там, где это необходимо, упрощает соблюдение навязанных извне рекомендаций по стилю.

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

person Tim Tripcony    schedule 07.04.2013
comment
Спасибо, Тим, очень подробное объяснение! - person Oliver Busse; 07.04.2013
comment
Я читал о xp:form где-то в самом StackOverflow, но до сих пор не знал о его полезности. Спасибо Тим! - person Naveen; 08.04.2013

Да, потому что вы выполняете запросы HTTP POST, и для них требуется форма.

Вместо этого вы можете преобразовать ссылку запроса POST в ссылку запроса GET, удалив событие SSJS и вместо этого создав «базовую» ссылку:

<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link>

Но если вам нужна логика SSJS, вам также нужна форма.

person Per Henrik Lausten    schedule 07.04.2013