如何从XSLT

时间:2017-03-28 11:19:58

标签: xslt

我正在创建一个包含下拉列表和按钮的网页。此页面的作用基本上是将原始下拉列表的值更新为新选择的值。

所以我宣布了一个这样的模板:

<xsl:template name="CustType">
    <xsl:param name="custTypeLbl" select="$lang.custTypeLbl"/>
    <xsl:param name="valueList"/>
    <xsl:param name="disable" select="'false'"/>
    <xsl:param name="controlName" select="'customertype'"/>
    <xsl:param name="onChange" select="''"/>

        <xsl:call-template name="SelectBox">
              <xsl:with-param name="selectBoxLabel" select="$custTypeLbl"/>
              <xsl:with-param name="controlName" select="$controlName"/>
              <xsl:with-param name="disable" select="$disable"/>
              <xsl:with-param name="valueList" select="$valueList"/>
              <xsl:with-param name="onChange" select="$onChange"/>
              <xsl:with-param name="valueColspan" select="''"/>
        </xsl:call-template>
</xsl:template>

以下是我的下拉内容:

<xsl:template name="CustomerTypeList">
<xsl:param name="selectedCustType"/>

    <xsl:call-template name="OptionElement">
        <xsl:with-param name="optionValue" select="'M'"/>
        <xsl:with-param name="optionDescription" select="$lang.opt.customerType.member"/>
        <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/>
    </xsl:call-template>

    <xsl:call-template name="OptionElement">
        <xsl:with-param name="optionValue" select="'E'"/>
        <xsl:with-param name="optionDescription" select="$lang.opt.customerType.employee"/>
        <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/>
    </xsl:call-template>

    <xsl:call-template name="OptionElement">
        <xsl:with-param name="optionValue" select="'N'"/>
        <xsl:with-param name="optionDescription" select="$lang.opt.customerType.nonmember"/>
        <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/>
    </xsl:call-template>        

    <xsl:call-template name="OptionElement">
        <xsl:with-param name="optionValue" select="'R'"/>
        <xsl:with-param name="optionDescription" select="$lang.opt.customerType.returncenter"/>
        <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/>
    </xsl:call-template>            


</xsl:template>

然后我调用/显示我的页面中的下拉列表:

                <xsl:call-template name="CustType">
                    <xsl:with-param name="customerType" select="$CUSTOMERTYPE"/>
                    <xsl:with-param name="valueList">
                        <xsl:call-template name="CustomerTypeList">
                            <xsl:with-param name="selectedCustType" select="$CUSTOMERTYPE"/>
                        </xsl:call-template>
                    </xsl:with-param>
                </xsl:call-template>

然后当我点击按钮时,它会传递这些参数:

<form name="{$customerDetailsForm}" action="{$formAction}" method="post" onSubmit="{$formOnSubmit}">
        <INPUT TYPE="Hidden" NAME="groupid" VALUE="{$groupId}"/>
        <INPUT TYPE="Hidden" NAME="selectedCustType" VALUE="{$CUSTOMERTYPE}"/>
        <INPUT TYPE="Hidden" NAME="namechangecode" VALUE=""/>
        <INPUT TYPE="Hidden" NAME="statusinfots" value="{$customerInfoNode/Status/@TimeStamp}"></INPUT>
        <input type="Hidden" name="loyaltyIDPanelFlag" value="HIDDEN"/>
        <input type="hidden" name="AccessScreen" value="{$AccessScreen}"/>
        <xsl:call-template name="DataLayout"/>
    </form>

我的问题是我没有得到customerType的选定值(例如:成员为“M”,非成员为“N”,员工为“E”)。它得到的仍然与旧的价值相同。 (我的“无数据已更改”错误处理程序被触发)

我已经对XSLT中的下拉进行了大量的研究,其中大多数都是针对每个人使用的,所以它确实无济于事。我也是这种语言的初学者,我只是分析代码并稍微调整一下这个增强,我还不熟悉这些语法。

我的问题是,“如何使用现有代码进行操作?”如果你还附上一个链接/解释一下,我会非常感激,所以我可以了解更多。非常感谢你。

1 个答案:

答案 0 :(得分:1)

如果您使用浏览器内置的XSLT 1.0引擎,那么它所能做的只是生成一个HTML页面,可能包含Javascript。一旦生成HTML页面(因此,在用户单击按钮时),XSLT已完成其工作并且不再执行:处理用户输入事件的唯一方法是在HTML页面的Javascript中。

如果使用Saxon-JS,则会发生变化,它允许您在XSLT样式表中编写响应用户输入事件并修改HTML页面的代码。你可以在http://www.saxonica.com/saxon-js/index.xml

上阅读有关Saxon-JS的内容