支持JavaScript和Ajax的JSF2下拉列表

支持JavaScript和Ajax的JSF2下拉列表,javascript,java,ajax,jsf-2,Javascript,Java,Ajax,Jsf 2,我有非常具体的需求,使用JSF2的JavaScript、JSF2和Ajax特性。我有一个包含两个值的下拉列表。说A和B <h:selectOneMenu class="form-control" id="sampleList" value="#{beanName.tempValue}"> <f:selectItem itemLabel="Select value..." itemValue="0" /> <f:selectItem itemLabel

我有非常具体的需求,使用JSF2的JavaScript、JSF2和Ajax特性。我有一个包含两个值的下拉列表。说A和B

<h:selectOneMenu class="form-control" id="sampleList" value="#{beanName.tempValue}">
    <f:selectItem itemLabel="Select value..." itemValue="0" />
    <f:selectItem itemLabel="A" itemValue="a" />
    <f:selectItem itemLabel="B" itemValue="b" />
    <f:ajax event="change" listener="#{beanName.actionMethodToNavigate}" onevent="if (this.value=='0'){ return false;} else if (this.value=='a'){jumpToAhchor('#listItems');return false;}"/>
</h:selectOneMenu>

如果下拉值为“a”,则用户将停留在同一页面上,并使用JavaScript锚定到同一屏幕上的其他元素。如果值为B,则调用bean方法,该方法最终将用户导航到其他屏幕

我尝试搜索了许多示例,许多人建议将JavaScript放在OneEvent属性中。但它在我的情况下不起作用,在浏览器中出现这个控制台错误


无论如何,我找到了解决方案,并认为它会有所帮助。 一些有价值的发现:
1。如果您想访问JavaScript中的bean变量,请将脚本放入表单中。
2。“onevent”中的函数有自己的变量“data”,并具有不同的状态(开始、完成和成功)。仅当状态为“成功”时执行任务,否则将运行3次。
3有关状态的更多信息,请参阅此

<h:selectOneMenu class="form-control" id="sampleList" value="#{beanName.tempValue}">
    <f:selectItem itemLabel="Select value..." itemValue="0" />
    <f:selectItem itemLabel="A" itemValue="a" />
    <f:selectItem itemLabel="B" itemValue="b" />
    <f:ajax event="change" listener="#{beanName.actionMethodToNavigate}" onevent="function(data){clickToNavigate(data, '#{beanName.tempValue}')}"/>
</h:selectOneMenu>

<script>
    function clickToNavigate(data, value){
        if(data.status=="success"){
            if (value=='0'){ 
                return false;
            } else if (value=='a'){
                 jumpToAhchor('#listItems');
                 return false;
            }
        }
    }
</script>

功能单击导航门(数据、值){
如果(数据状态=“成功”){
如果(值=='0'){
返回false;
}else if(值=='a'){
跳转到HCHOR(“#列表项”);
返回false;
}
}
}

您需要编写更多的代码,例如,您的JS代码等。提供的代码太少,无法找到根本原因。感谢您的关注。但我找到了解决办法,意识到我做错了。“OneEvent”接受函数名而不是JavaScript代码。它是重复的,因为通用/通用/底层问题是相同的。学会了解这一点对于更快地找到问题的解决方案至关重要“学会了解这一点对于更快地找到问题的解决方案至关重要”-同意!参考stackoverflow Q/A和其他“状态”会很好。。。谢谢刚刚补充说。谢谢