检测<tr:table> </tr:table> </h:selectonemenu>中<h:selectonemenu>的值变化

时间:2012-11-19 21:55:18

标签: jsf-1.2 jspx

有一个这样的表:

<h:panelGroup rendered="#{ImportFromCSVFile.step2Visible}">
    <div style="width: 100%; overflow: auto; max-height: 400px;">
        <tr:table id="step2ColumnMappings" var="columnMappingEntry" rows="0" rowBandingInterval="1" value="#{ImportFromCSVFile.columnMappings}">
            <tr:column>
                <tr:outputLabel value="#{columnMappingEntry.columnIndex}"/>
            </tr:column>
            <tr:column>
                <tr:outputLabel value="#{columnMappingEntry.columnValue}"/>
            </tr:column>
            <tr:column>
                <h:selectOneMenu value="#{columnMappingEntry.columnType}" validator="#{ImportFromCSVFile.validateColumnType}" onchange="submit()" valueChangeListener="#{ImportFromCSVFile.columnMappingChanged}">
                    <f:selectItems value="#{ImportFromCSVFile.columnsToBeMapped}" />
                </h:selectOneMenu>
            </tr:column>
        </tr:table>
    </div>
</h:panelGroup>

它(正确地)呈现为具有三列的表:前两个中的文本和最后一个中的下拉列表。也可以根据模型中的值正确初始化下拉列表。

我需要做的是每次下拉列表中的值发生变化时都能运行一些逻辑。我正在考虑在valueChangeListener上使用selectOneMenu,正如您在代码中看到的那样,但它不会被调用。现在唯一想到的是在提交表单时使用POST参数,这不是最佳选择。

你知道如何让valueChangeListener在这种情况下工作吗? JSF 1.2。我可能错过了一个明显或已知的解决方案,但不幸的是,我之前很少有使用JSF的经验,也没有定期使用它。

非常感谢你!

xmlns:h="http://java.sun.com/jsf/html" xmlns:tr="http://myfaces.apache.org/trinidad"

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用<tr:selectOneChoice而不是&lt; h:selectOneChoice。以相同的方式使用它的 valueChangeListener 。但是,您不能仅仅通过Javascript提交表单,因为它不了解JSF生命周期(不会发布正确的内容,并且您的代码不应该与JSF内部级别进行交互)。如果设置<tr:selectOneChoice autoSubmit="true"...,则当调用值更改侦听器的下拉菜单值更改时,这将导致发布帖子。

答案 1 :(得分:0)

调用javascript函数就像你在代码片段中提到的那样,不会提交你的表单。要调用

  

valuechange

监听器您需要向辅助bean提交请求,该请求将检查您的应用程序级逻辑。您可以尝试删除

  

的onClick

属性,也请在放置

时发送消息
  

验证

。有时会发生这样的情况,即当验证未成功并且您没有附加相应的消息或通知时,将不会执行所需的操作。所以即使你的逻辑可能是写的,但他的JSF生命周期中断

  

验证阶段

并且不会调用您的剩余操作。