自从使用Stripes多年以来,我们的团队正在编写其第一个JSF 2.0应用程序,并且我对使用f:ajax标记和验证输入的最佳方法有一些疑问.
我见过的许多问题都有一个带有多个输入的表单,然后是一个提交按钮),但我们希望保持个别输入字段在更改后立即更新并持久保存到数据库(没有提交按钮.我们有这个工作Stripes使用Prototype的Ajax.Request很好,但如果可能的话,这是我想避免的额外步骤.
基本上我们有一个页面,其上有一堆输入,直接由bean支持,例如:
<h:inputText id="name" value="#{personController.name}" >
<f:ajax listener="#{personController.ajax}" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
您可能知道,在调用侦听器时,bean的值已经更改.这样很方便,但我遇到了一些问题:
现在看起来我们必须实现某种javascript中间人来接受属性更改和新值,将其发送到Controller,并让它执行验证,更新数据库,发送回渲染的内容等但就像我说的那样,这就是我们以前用Stripes做的事情,我真的很喜欢使用原生的东西.
我确实看到如果我们想在页面上使用某种提交按钮,我们可以使用类似valueChangeListener属性的东西,但我也想避免大量提交.
我包含了OpenFaces标签,因为我们已经将它用于数据表,所以如果那里有一些不错的东西我们就可以使用它了.但据我所知,他们的o:ajax标签并不比JSF的f:ajax强大得多.
谢谢!
我在glassfish 3.0.1上使用jsf 2.0来构建我的搜索引擎的接口,当我在我的jsf页面上使用Openfaces组件时,每当我提交表单时,我都会收到以下错误消息:
java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为com.sun.faces.application.view.StateHolderSaver
我没有在网上找到任何帮助,请问有什么问题?以及如何摆脱它?
谢谢.
不幸的是,OpenFaces Datatable还没有像Primefaces或IceFaces那样的导出功能.虽然导出是小菜一碟,过滤IceFaces或primefaces数据表是一些恐怖电影,但primeFaces的过滤不适用于JSF DataModel(悲伤但真实).
使用OpenFaces DataTable过滤是一件小事,非常方便和强大.但是,最终用户想要将他/她过滤的数据表导出为CSV或MS Excel等格式.
来自OpenFaces的伟大的Dmitry给了我一个提示:使用OpenFaces DataTable方法:从数据表中getDisplayedRowDatas()获取当前显示的行,然后使用像Itext这样的第三个thrid库来导出PDF格式.
在我看来,这应该是这样的:
getDisplayedRowsDatas()- 但我担心此方法不会返回列标题的名称 - 或者将OpenFaces Datatable呈现的HTML表作为缓冲字符串并使用Apache POI生成使用Buffer流式传输的Excel文件.在我最近遇到的MyFaces示例中:MyFaces Datatable Export Example,开发人员使用Myfaces组件<t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer />将数据表的内容转换为缓冲的String,这使事情变得更容易.不幸的是,JSF Core没有这样的组件.
有人曾经遇到过这个吗?非常感谢帮助或更好的替代方案.
jsf ×4
openfaces ×4
ajax ×1
apache-poi ×1
datatable ×1
export ×1
java ×1
jsf-2 ×1
validation ×1