Xforms复选框 - 用Y / N替换True / False

时间:2014-01-03 16:40:52

标签: forms checkbox xforms xforms-betterform

我正在编写一个表单(betterFORMs / Xforms),通过选择复选框向用户显示。 如果复选框为空,则表单应将“N”绑定到元素中。勾选时,为“Y”。 我已经意识到这个问题已经有了答案,但我已经尝试了所有解决方案而没有运气。

我尝试使用的第一个解决方案是 here - stackoverflow link

(第一个解决方案看起来不错,但我在解决方案2方面取得了更多成功,因为我没有使用Orbeon)

给出的答案是我正在寻找的,但我无法在我的表格中实现这一点。我没有使用Xhtml或Orbeon,因此我使用的绑定似乎与解决方案中使用的绑定不同。)我尝试调整此代码以适应我的表单但是每次加载时我都会从xml解析器中得到重复错误页面 - 但它并没有指向任何与新代码相关的地方。

找到了我尝试的下一个解决方案 here - stackoverflow link

这个答案在我的代码中得到了最好的结果,因为复选框值在未使用时和取消选择时会更改为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。我知道我可以使用每个复选框的布尔值来执行此操作,其复选框值对应于布尔值,而布尔值又会更新绑定值。我宁愿不必拥有大块的布尔元素和绑定,因为我有大量的复选框。这个解决方案有一个例子here - stackoverflow link

1 个答案:

答案 0 :(得分:2)

选择控件允许您选择多个项目,我想知道您使用的XForms实现是否正在添加方括号(根据规范选择的值必须用空格字符分隔,这并不总是顺便说一句非常方便)。

我担心XForms 1.1和XForms 2.0需要使用额外的中间节点和绑定。能够为绑定添加2个XPath表达式是有用的:一个用于将节点值转换为控制值,另一个用于从控制值返回到节点值。

作为一种解决方法,我在XSLTForms中使用另一个扩展:XSLT样式表用于转换实例。

-Alain