Флажок 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

Другие вопросы по тегам