Jsf h:SelectOne菜单值更改事件在h:commandButton上触发单击?
我有下面的下拉列表,其中有一个与之关联的事件,当用户从该下拉列表中选择一个值时,其余的下拉列表以及一个表将相应地填充:Jsf h:SelectOne菜单值更改事件在h:commandButton上触发单击?,jsf,seam,Jsf,Seam,我有下面的下拉列表,其中有一个与之关联的事件,当用户从该下拉列表中选择一个值时,其余的下拉列表以及一个表将相应地填充: <Td> <h:selectOneMenu id="combocarList" value="#{customerBean.selectedcar}" styleClass="comboStyle" valueChangeListener="#{customerBean.loadothercombos}" onch
<Td>
<h:selectOneMenu id="combocarList"
value="#{customerBean.selectedcar}"
styleClass="comboStyle"
valueChangeListener="#{customerBean.loadothercombos}"
onchange="document.forms[0].submit()"
>
<f:selectItem
itemLabel="-----------Select--------------"
itemValue="None" />
<f:selectItems value="#{customerBean.carsList}" />
</h:selectOneMenu>
</Td>
当我单击Submit按钮时,将调用与上述下拉列表相关联的事件,并且从未调用javascript函数!这是预期的行为吗?如果是这样的话,我如何使javascript函数在触发事件之前被调用,从而允许检查用户是否从下拉列表中选择了值。我不确定您是否已经阅读了前面的一个问题。你从未给出任何反馈,你接受了另一个答案。我已经警告过了,这种方法是一种黑客手段 你基本上是在滥用valueChangeListener。它的唯一目的是提供一个同时访问旧值和新值的点,以便您可以在必要时采取特定的业务操作,例如记录这两个值 使用它的唯一目的是仅基于新值自动填充另一个组件/元素,而您对旧值完全不感兴趣,这是一种攻击。如果您已经在使用JSF2.0,我真的强烈推荐链接答案中提到的方法 回到您的具体问题,您需要了解,只要提交的值与初始模型值不同,就会始终激发valueChangeListener。这与所有JavaScript帮助无关。onchange=submit并没有专门触发侦听器,它只是将整个表单提交给服务器。它恰好发生在终端用户更改下拉列表时,因此可以保证更改,因此监听器将在服务器端调用 您的问题表明您没有在valueChangeListener中使用提交的值设置模型值,并且您正在调用FacesContextrenderResponse。这种方法与我的链接答案的第1种方式几乎相同,除了将提交的值设置为模型值的行。因为您没有设置它,所以任何后续表单提交都会触发侦听器,因为提交的值与模型值不同!。此外,由于FacesContextresponseComplete跳过了调用操作阶段,因此永远不会调用操作方法
现在,再次阅读我的链接答案,看看如何正确地实现它 我不确定你是否读过你之前的一个问题。你从未给出任何反馈,你接受了另一个答案。我已经警告过了,这种方法是一种黑客手段 你基本上是在滥用valueChangeListener。它的唯一目的是提供一个同时访问旧值和新值的点,以便您可以在必要时采取特定的业务操作,例如记录这两个值 使用它的唯一目的是仅基于新值自动填充另一个组件/元素,而您对旧值完全不感兴趣,这是一种攻击。如果您已经在使用JSF2.0,我真的强烈推荐链接答案中提到的方法 回到您的具体问题,您需要了解,只要提交的值与初始模型值不同,就会始终激发valueChangeListener。这与所有JavaScript帮助无关。onchange=submit并没有专门触发侦听器,它只是将整个表单提交给服务器。它恰好发生在终端用户更改下拉列表时,因此可以保证更改,因此监听器将在服务器端调用 您的问题表明您没有在valueChangeListener中使用提交的值设置模型值,并且您正在调用FacesContextrenderResponse。这种方法与我的链接答案的第1种方式几乎相同,除了将提交的值设置为模型值的行。因为您没有设置它,所以任何后续表单提交都会触发侦听器,因为提交的值与模型值不同!。此外,由于FacesContextresponseComplete跳过了调用操作阶段,因此永远不会调用操作方法 现在,再次阅读我的链接答案,看看如何正确地实现它
<TD>
<h:commandButton id="btnCheckVals" value="Submit"
onclick="return checkSelectedVal(this);"
></h:commandButton>
</TD>