`
ayaya
  • 浏览: 450096 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

jsf中应用javascript

阅读更多

转载

一个常见的情况是在触发一个动作之前弹出一个确认对话框(例如:删除一条记录,取消编辑)。另一个常见的情况是在保存一些信息到服务器之前在客户端做验证,例如在传回服务器之前验证 password和Confirm password是否相等。
这篇文章描述了在<h:commandLink>和<h:commandButton>组件里如何触发客户端的java script功能。 <h:commandLink> 关联一个java script和一个commandLink并不困难,但是为了能够成功关联你需要理解jsf是怎样解析<h:commandLink>组件的。
下面的例子说明了<h:commandLink>是怎么被解析成HTML的:
<h:form id=”userForm”>
<h:commandLink id=”lnkDeleteUser” value=”delete” action=”#{userBean.deleteUser}”/>
</h:form>
<a href="#" onclick= "clear_userForm();
document.forms['userForm'].elements['userForm:_link_hidden_'].value='userForm:lnkDeleteUser';
if (document.forms['userForm'].onsubmit){
if (document.forms['userForm'].onsubmit())
document.forms['userForm'].submit();
}
else {
document.forms['userForm'].submit();
}
return false; "
id="userForm:lnkDeleteUser">delete</a>
这里有几点需要注意:
1,<h:commandLink>被解析成了超级链接<a href/>。
2,这个超链接的href是"#";基本上是个无用的值。
3,JSF为这个超链接的'onclick'事件生成了一堆java script。忽略细节,它主要是调用 submit()函数来提交表单。
4,第三行比较有意思--这个组件的id (“userForm::lnkDeleteUser”) 被保存在了一个 hidden元素里。这也是jsf是如何知道哪个组件触发提交表单的操作并正确的调用 服务器端actions的关键。

大多数JSF组件允许我们为客户端的DHTML事件(比如onclick,ondoubleclick,onfocus等)注入java script的。但在<h:commandLink〉里JSF已经为onclick事件生成了相关的java script。下面的代码说明了如何在onclick事件里注入打开确认对话框的java script代码:
<h:form id=”userForm”>
<h:commandLink id=”lnkDeleteUser” value=”delete” onClick=”if (!confirm('Are you sure you want to delete this record?')) return false” action=”#{userBean.deleteUser}”/>
</h:form>
<a href="#" onclick= "if (!confirm('Are you sure you want to delete this record?')) return false;
clear_userForm();
document.forms['userForm'].elements['userForm:_link_hidden_'].value='userForm:lnkDeleteUser';
if (document.forms['userForm'].onsubmit){
if (document.forms['userForm'].onsubmit())
document.forms['userForm'].submit();
} else {
document.forms['userForm'].submit();
}
return false; "
id="userForm::lnkDeleteUser">delete</a>
另外一个需要注意的重点是java script在任何情况下都不能返回true值。如果返回true值的话,浏览器将会执行<a href="#"/>-这只是指向了一个虚拟的页。 <h:commandButton> commandButton组件要相对简单一些,下面的脚本说明了如何加入一个确认对话框:
<h:commandButton id=”btnCancel” value=”Cancel” onclick=”if (!confirm('You will lose all changes made. Are you sure?')) return false" />
<input id="userForm:btnCancel" name="userForm:btnCancel" type="submit" value="Cancel" onclick=" if (!confirm('You will lose all changes made. Are you sure?')) return false; clear_userForm(); "/>
在这里的commandButton被解析成了一个提交按钮。如果java script返回true值这个表单会被提交,如果返回false将会忽略表单的提交。 在JSF里成功使用java script的关键是理解它是怎样被解析的。理解一些java script会更好。另外需要小心的是语法,因为大多数IDE都不支持java script的语法交验。如果你写了一个语法错误,例如少了一个打括号,代码将会简单的默默的执行失败:)

分享到:
评论
1 楼 fourfire 2008-04-11  
这是jsf 1.2下的,1.1下面:commandLink 没有onclick,怎么办啊?

相关推荐

    CSS、JavaScript 和 JSF 精心打造 Ajax 应用

    CSS、JavaScript 和 JSF 精心打造 Ajax 应用,需要的朋友可以去下载。

    联合使用 CSS、JavaScript 和 JSF 精心打造 Ajax 应用程序

    在本系列的第二个部分中,我们将学习如何使用标准 JSF 组件的 JavaScript 相关属性。学习几种基于文档对象模型(Document Object Model,DOM)API、JavaScript™ 和层叠样式表(Cascading Style Sheets,CSS)的 Web...

    第2部分-动态JSF表单

    第2部分-动态JSF表单(CSS、JavaScript和JSF联合打造 Ajax应用程序).zip

    第1部分-增强JSF页面的外观

    第1部分-增强JSF页面的外观(CSS、JavaScript和JSF联合打造 Ajax应用程序).zip

    jboss as 7 support jsf2.2.1 modules

    虽然只是小版本的升级,但对于希望在JSF应用中使用HTML5技术的开发人员而言,JSF 2.2带来的更新很重要,尤其是pass through能力,它允许在JSF组件不知情的情况下传递HTML属性。 HTML5中增加了很多新特性,其中有些...

    primefaces-6.0.rar

    PrimeFaces提供的JSF组件能够处理JavaScript Rendering和如何在服务器端与JSF集成。PrimeFaces UI组件包括:HtmlEditor、ImageCropper、Dialog、AutoComplete、Flash based Chart等。并支持通过Ajax更新页面。 ...

    jsf-spa:JSF +单页应用程序

    而无需刷新整个页面页面可以刷新和加书签应用服务器处理身份验证/授权向后兼容可在不使用Javascript的情况下工作####图书馆野蝇8.1 Hibernate4.3.5 JSF 2.2 History.js jQuery的2.1.4笔记使用HttpSessionListener...

    breadshop:面包店的示例JSF 1.2应用程序(使用Spring 5)

    使用JavaScript(jQuery)动态求和 客户可以取消面包预订(但仅在预订时) 客户可以保留多少面包是有限制的(如果需要更多面包,则需要打个电话或打个私人电话) 客户可以看到他们当前的预订 所有者(未实现)具有

    PrimeFacesV6.0.jar

    PrimeFaces提供的JSF组件能够处理JavaScript Rendering和如何在服务器端与JSF集成。PrimeFaces UI组件包括:HtmlEditor、ImageCropper、Dialog、AutoComplete、Flash based Chart等。并支持通过Ajax更新页面。 2、...

    easy-boni-jsf:斯洛文尼亚学生膳食系统 Web 应用程序 - 在 Java EE 和 JSF 中实现

    EasyBoni 网络应用程序的目的是以比官方网站更易于使用和用户友好的方式提供有关学生膳食系统中涉及的餐厅的信息。 关于技术 JPA(Hibernate) MySQL 和 PostgreSQL 支持 Spring国际奥委会 JAX-RS(球衣) JSF...

    PrimeUI Widgets

    PrimeFaces是一个轻量级的、支持JSF 2.0的开源组件套件,具有100多个丰富的JSF组件,极大地提高了JSF Web应用程序的开发效率。 PrimeFaces是一个用于提高JSF Web应用程序开发效率的开源类库。主要由三个模块组成: ...

    jquery4jsf-开源

    jQuery4jsf 是一个 JSF(JavaServer Faces)组件库,它使用了 jQuery javascript 框架的强大功能。 这些 JSF(JavaServer Faces) 组件具有 jQuery 的附加价值,它允许最终用户快速简单地实现其应用程序。

    wicked-charts:基于Java的Web应用程序的美观且交互式的javascript图表

    使用Wicked Charts,您可以使用Java配置图表并将其显示在任何基于Apache Wicket或JSF的Web应用程序中。 或者,您可以使用Chart.js或Highcharts Java包装器将其集成到使用其他Java Web框架构建的Web应用程序中。 请...

    BlobStorage:使用 azure 的文件存储 (blob) 服务的 JSF 应用程序

    Blob存储 使用 azure 的文件存储 (blob) 服务的 JSF 应用程序。

    bookstore-jsf-ca-backend:javascript框架课程分配的后端

    Strapi应用您的trapi应用程序的简要说明

    mvc-router:支持MVC模式JavaScript单页应用程序路由器

    MVC路由器一个JavaScript库,用于使用模型视图控制器(MVC)设计模式构建单页应用程序(SPA)。安装要将MVC路由器添加到您的应用程序,请执行以下操作: npm install mvc-router-spa --save为什么选择MVC? MVC是一...

    dockerized-java-e-commerce-app:使用JEE和JSF框架的电子商务Web应用程序

    使用JEE和JSF框架的电子商务Web应用程序 :ghost: 该项目是为对的最终检查而创建的 这背后的主要思想是,我们必须创建一个电子杂货店,销售来自不同供应商的多种产品。 杂货店只能通过佣金来赚钱。 :memo: 要求清单...

    Java EE 7 with GlassFish 4 Application Server 2014年英文原版

    书中还介绍了JSON-P,为JSON(JavaScript对象符号)处理的Java API。这种先进的主题涉及如何在两个API用于处理JSON功能,即模型API和流API。除了重温Java服务器面(JSF),它解释了为什么Facelets的,在JSF的现代...

    JavaServer Faces 2.0, The Complete Reference

    自从JSF 2.0立项起,就一直关注他,除了他承诺的那些技术和思想上的先进性,更多的原因是由于他为适应Web 2.0开发应用而提出的简化开发流程,提供灵活便捷的组件开发模式;或者可以说是由于他承诺在提高开发人员效率...

    RichFaces开发指南3.3.3

    RichFaces是一个开源框架,它不借助于JavaScript而增加Ajax能力到存在的JSF应用程序中。

Global site tag (gtag.js) - Google Analytics