有一个这样的表:
<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"
答案 0 :(得分:0)
最简单的方法是使用<tr:selectOneChoice而不是&lt; h:selectOneChoice。以相同的方式使用它的 valueChangeListener 。但是,您不能仅仅通过Javascript提交表单,因为它不了解JSF生命周期(不会发布正确的内容,并且您的代码不应该与JSF内部级别进行交互)。如果设置<tr:selectOneChoice autoSubmit="true"...
,则当调用值更改侦听器的下拉菜单值更改时,这将导致发布帖子。
答案 1 :(得分:0)
调用javascript函数就像你在代码片段中提到的那样,不会提交你的表单。要调用
valuechange
监听器您需要向辅助bean提交请求,该请求将检查您的应用程序级逻辑。您可以尝试删除
的onClick
属性,也请在放置
时发送消息验证
。有时会发生这样的情况,即当验证未成功并且您没有附加相应的消息或通知时,将不会执行所需的操作。所以即使你的逻辑可能是写的,但他的JSF生命周期中断
验证阶段
并且不会调用您的剩余操作。