0

有一个这样的表:

<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>

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

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

你知道我如何才能valueChangeListener在这种情况下工作吗?JSF 1.2。我可能遗漏了一个明显或已知的解决方案,但不幸的是,我以前使用 JSF 的经验非常少,并且没有定期使用它。

非常感谢您!

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

4

2 回答 2

0

像您在代码片段中提到的方式那样调用 javascript 函数将不会提交您的表单。调用

价值变化

侦听器,您需要向支持 bean 提交一个请求,该 bean 将检查您的应用程序级逻辑。您可以尝试删除

点击

属性,并且请在您放置了一个消息时留言

验证器

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

验证阶段

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

于 2012-12-13T06:02:37.403 回答
0

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

于 2012-12-13T05:37:31.097 回答