XForms: использование расчета и атрибута xxforms: по умолчанию в привязке набора узлов - PullRequest
2 голосов
/ 25 июня 2010

У меня есть form1, передающая параметр строки запроса (param1) в form2. Я передаю param1 = true из формы1. В форме 2 я пытаюсь установить значение параметра param1 в локальный экземпляр. Если я НЕ передаю param1 из формы 1, я хочу, чтобы form2 приняла значение param1 равным false. Вот мой экземпляр.

<xforms:instance id="querystring-instance">
    <query-string>
        <param1></param1>
    </query-string>
</xforms:instance>

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

<xforms:bind nodeset="instance('querystring-instance')/param1" calculate="xxforms:get-request-parameter('param1')" xxforms:default="false()" />

Это не работает. Если параметр param1 присутствует, он работает и устанавливает значение в строке запроса в true. Если param1 нет, он ничего не устанавливает. Я хочу, чтобы это было установлено в ложь. Как мне это сделать?

1 Ответ

2 голосов
/ 26 июня 2010

Возможно, вы захотите установить параметр только при инициализации, поэтому используйте xxforms:default вместо calculate.calculate будет оцениваться при каждом пересчете XForms, и это не удастся, поскольку xxforms:get-request-parameter() доступно только во время инициализации XForms.

Условие можно реализовать в XPath.

xxforms:get-request-parameter() returnи пустая последовательность, если параметр отсутствует.Это должно работать:

<xforms:bind nodeset="instance('querystring-instance')/param1"
             xxforms:default="(xxforms:get-request-parameter('param1'), 'false')[1]"/>

Это значит, что если xxforms:get-request-parameter() возвращает пустую последовательность, то первое значение последовательности будет 'false', и именно это будет использоваться для установки значения.

...