栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

h:selectOneMenu中的f:ajax侦听器方法未执行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

h:selectOneMenu中的f:ajax侦听器方法未执行

<f:ajax>
要求
jsf.js
包含在HTML文件之中
<head>
。它包含用于执行JSF ajax魔术的所有JS函数。

为此,请确保在主模板中使用

<h:head>
而不是
<head>
。然后,JSF将自动在其中包含
<script>
指向的必要元素
jsf.js

<!DOCTYPE html><html lang="en"    xmlns="http://www.w3.org/1999/xhtml"    xmlns:f="http://java.sun.com/jsf/core"    xmlns:h="http://java.sun.com/jsf/html"    xmlns:ui="http://java.sun.com/jsf/facelets">    <h:head>        <title>Look, with h:head</title>    </h:head>    <h:body>        Put your content here.    </h:body></html>

请注意,在带有Firefox的Web Developer Toolbar和/或Firebug的Web开发人员工具集的Web浏览器中,您应该立即注意到JS错误,例如

jsf is undefined
将执行ajax请求时。至少应该考虑一下。


更新 :根据您的更新

我发现了一些有趣的东西:

<f:ajax>
标签不工作
<h:link>
<h:selectOneMenu>
<h:button>
<h:commandButton>
。在这种情况下,
render
不会注意到
event
属性中的错误值,但是属性的错误值会产生错误。

<h:outputLabel>
<h:inputText>
可以
<f:ajax>
正常使用。

<h:link>
<h:button>
被intented的GET请求,不是POST请求。但是,它应该在
<h:selectOneMenu>
和上都可以正常工作
<h:commandButton>
。为了简化起见,您没有在问题中省略完整代码的更多代码吗?您正在使用哪个JSF展示/版本?您是否在classpath中使用了正确的库?看来您确实必须弄乱了某些东西。

为了说服您(和我自己),我刚刚创建了以下副本’n’paste’n’runnable测试用例

<!DOCTYPE html><html lang="en"    xmlns:h="http://java.sun.com/jsf/html"     xmlns:f="http://java.sun.com/jsf/core"    xmlns:ui="http://java.sun.com/jsf/facelets">    <h:head>        <title>SO question 6089924</title>    </h:head>    <h:body>        <h:form> <h:selectoneMenu value="#{bean.selected}">     <f:selectItem itemValue="#{null}" itemLabel="Select..." />     <f:selectItem itemValue="one" />     <f:selectItem itemValue="two" />     <f:selectItem itemValue="three" />     <f:ajax listener="#{bean.listener}" render="result" /> </h:selectOneMenu> <h:commandButton value="commandButton" action="#{bean.submit}">     <f:ajax listener="#{bean.listener}" render="result" /> </h:commandButton> <h:outputText id="result" value="#{bean.selected} #{bean.result}" /> <h:messages />        </h:form>    </h:body></html>

用这个豆

package com.example;import java.io.Serializable;import javax.faces.bean.ManagedBean;import javax.faces.bean.ViewScoped;import javax.faces.event.AjaxBehaviorEvent;@ManagedBean@ViewScopedpublic class Bean implements Serializable {    private String selected;    private String result;    public void submit() {        System.out.println("submit");    }    public void listener(AjaxBehaviorEvent event) {        System.out.println("listener");        result = "called by " + event.getComponent().getClass().getName();    }    public String getSelected() {        return selected;    }    public void setSelected(String selected) {        this.selected = selected;    }    public String getResult() {        return result;    }}

它与Mojarra 2.1.1在Tomcat 7.0.12上运行良好。

INFO: Starting Servlet Engine: Apache Tomcat/7.0.12INFO: Initializing Mojarra 2.1.1 (FCS 20110408) for context '/playground'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号