Флажок Xforms - замена True / False на Y / N
Я пишу форму (лучше форм /Xforms) для отображения пользователю с выбором флажков. Если флажок не установлен, форма должна привязать "N" к элементу. Когда отмечен, "Y". Я понимаю, что уже есть ответы на этот вопрос, но я попробовал все ответы безуспешно.
Первое решение, которое я попытался использовать, здесь - ссылка на stackru
(первое решение выглядит хорошо, но у меня был больший успех с решением 2, так как я не использую Orbeon)
Полученный ответ - это то, что я ищу, но у меня возникли проблемы с внедрением этого в мою форму. Я не использую Xhtml или Orbeon, поэтому связывание, которое я использую, похоже, отличается от используемого в решении.) Я пытался настроить этот код, чтобы он соответствовал моей форме, но я получаю повторяющуюся ошибку от анализатора xml каждый раз, когда загружаю страница - но это не указывает мне ни на что, связанное с новым кодом.
Следующее решение, которое я попробовал, находится здесь - ссылка на stackru
Этот ответ имел лучшие результаты в моем коде, потому что значения флажка изменяются на N, когда они не используются и когда они отменены. Проблема, которую я имею с этим решением, состоит в том, что набор Y в элементе формы содержится в фигурных скобках - [].
пример вывода:
<addressProof>N</addressProof><other>[Y]</other><otherText>_text_</otherText>
Вот фрагмент моей формы:
модель:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/2002/06/xhtml2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<xsl:output method="xml" />
<xsl:template match="/">
<xforms:model id="documentsChecklist">
<xforms:instance>
<actionform xmlns="">
<xforms:model id="documentsChecklist">
<xforms:instance>
<actionform xmlns="">
<detail>
<other></other>
<otherText></otherText>
</detail>
</actionform>
</xforms:instance>
<xforms:bind id="other" nodeset="/actionform/detail/other" calculate="choose(. = 'Y', ., 'N')"/>
<xforms:bind nodeset="/actionform/detail/otherBox" relevant="/actionform/detail/other ='Y'" />
</xforms:model>
форма:
<div id="formBody"><br />
<xforms:select bind="other" appearance="full" align="right">
<xforms:item>
<xforms:label>Other</xforms:label>
<xforms:value>Y</xforms:value>
</xforms:item>
</xforms:select>
<xforms:input ref="/actionform/detail/otherText">
<xforms:label>Please specify:*</xforms:label>
</xforms:input>
</div>
</xsl:template>
</xsl:stylesheet>
Почему значение флажка теперь установлено на "[Y]" вместо "Y"? (Может ли это быть что-то делать с массивом?) Спасибо.
PS. Я знаю, что мог бы сделать это, используя логическое значение для каждого флажка, со значением флажка, соответствующим логическому значению, которое, в свою очередь, обновляет значение привязки. Я бы предпочел не иметь большой блок логических элементов и привязок, так как у меня есть большое количество флажков. у этого решения есть пример здесь - ссылка на stackru
1 ответ
Элемент управления select позволяет вам выбрать более одного элемента, и мне интересно, почему используемая вами реализация XForms добавляет квадратные скобки (в соответствии со спецификацией выбранные значения должны быть разделены пробелом, что не всегда удобно путь).
Я боюсь, что XForms 1.1 и XForms 2.0 требуют использования дополнительных промежуточных узлов и привязок. Было бы полезно иметь возможность добавить 2 выражения XPath для привязок: одно для преобразования значения узла в контрольное значение, а другое обратно из контрольного значения в значение узла.
В качестве обходного пути я использую другое расширение в XSLTForms: таблицы стилей XSLT для преобразования экземпляров.
-Alain