文档章节

JSF+Spring+JPA(Hibernate)常见bug解决办法

码上中国博客
 码上中国博客
发布于 2015/03/03 09:42
字数 1117
阅读 145
收藏 1

由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统、详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的,很可能会误导使用者。

相对来说,看国内的那些仅仅是翻译过来的文章或书籍不如直接看国外的官方文档或资料来的实在,在我讲述jsf页面中如何使用js调用后台bean方法之前,先给大家说几个国外的资料。在primefaces官方网站上,你可以搜索到几乎所有你需要的东西,primefaces官网为:http://www.primefaces.org/showcase/index.xhtml 如过觉得自己英语不好的童鞋,可以前往primefaces国内镜像网站查阅资料: http://www.primefaces.cn/ ,只是国内的这个网站正在翻译中,有些东西还不完善;如果有想细致的了解primefaces的朋友,还可以下载primefaces的官方文档,最新的官方文档为5.2,全英文,我在这里给大家提供我下载好的primefaces官方文档:http://pan.baidu.com/s/1mg3i9Ry ,在这个文档里你可以通过他们的示例来组合出来很多有趣的东西。另外我在淘宝上发现了Primefaces官方的JSF框架,官方售价300RMB,淘宝售价才五元,大家可以前去学习:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-12555052969.2.nPXnNz&id=523880497056

一、单选/多选(p:selectOneMenu/p:selectCheckboxMenu)

         1、选项只有第一次可以传至后台,多次点击就不能传递至后台:

页面代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	xmlns:pe="http://primefaces.org/ui/extensions">
<f:view contentType="text/html" locale="zh_CN">

	<h:head title="ZCPLT - HOME">
	<title>测试页面</title>
		<f:facet name="first">
			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
			<meta http-equiv="pragma" content="no-cache" />
			<meta http-equiv="cache-control" content="no-cache" />
			<meta http-equiv="expires" content="0" />
		</f:facet>
		<h:outputStylesheet name="css/theme.css" />
		<h:outputStylesheet name="css/image.css" />
		<h:outputStylesheet name="css/perfect-scrollbar.css" />
		<h:outputScript name="jquery/jquery.js" library="primefaces" />
		<h:outputScript name="jquery/jquery-plugins.js" library="primefaces" />
		<h:outputScript name="script/perfect-scrollbar.js" />
		<ui:insert name="head" />
	</h:head>

<h:body>
	<h:form id="form">
		<h:panelGrid columns="6" id="addPanel">
			<p:outputLabel for="tableName" value="选择类名" />
			<p:selectOneMenu id="tableName" value="#{pvgEditManager.selectedClassString}"  
				disabled="#{pvgEditManager.selectedClassString !=null}" panelStyle="width:180px"
				effect="fade" style="width:160px" filter="true"
				filterMatchMode="startsWith">
				<p:ajax listener="#{pvgEditManager.onTableChange}" />
				<f:selectItem itemLabel="选择类" itemValue="" noSelectionOption="true" />
				<f:selectItems value="#{pvgEditManager.classStrings}" />
			</p:selectOneMenu>
		</h:panelGrid>
	</h:form>
</h:body>
</f:view>
</html>

后台bean类代pvgEditManager.java码如下:

package test;

import java.io.Serializable;
import java.util.List;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import zuccess.zcplt.basic.privilege.dao.TableDao;


@Named("pvgEditManager")
@ViewScoped
public class PvgEditManager implements Serializable {

	private static final long serialVersionUID = 5586577032813381888L;

	private TableDao classDao = new TableDao();
	private List<String> classStrings = classDao.findAllClass();// 重数据库中查询到的所有的表
	private String selectedClassString; // 选中的表
	/***
	 * 获取所有的类的名称
	 */
	public void searchClasses() {
		classStrings = classDao.findAllClass();
	}
	/**
	 * 表改变
	 */
	public void onTableChange() {
		System.out.println("获取的class名称为:++++++"+selectedClassString);
	}
	public List<String> getClassStrings() {
		return classStrings;
	}
	public void setClassStrings(List<String> classStrings) {
		this.classStrings = classStrings;
	}
	public String getSelectedClassString() {
		System.out.println("get方法中的置为:==============="+selectedClassString);
		return selectedClassString;
	}
	public void setSelectedClassString(String selectedClassString) {
		this.selectedClassString = selectedClassString;
		System.out.println("set方法中的置为:==============="+selectedClassString);
	}
	
}

当测试以上代码时,会发现只有第一次选择下拉列表时能调用后台set/get方法,而再次点击就不能调用set/get方法,仔细分析上面的逻辑发现,其根本原因是由于,在这个下拉列表的有个属性disabled="#{pvgEditManager.selectedClassString !=null}",把这个属性去掉就没有问题了;那么,为什么这个属性就会造成这个问题呢,其根本原因在于,我想达到当选择了一次下拉列表以后就不再让它可以选择,而正是由于第一次选择了以后,这个selectedClassString已经在后台不为null了,但是由于这个动作并没有自动刷新页面,造成在页面上的下拉列表仍旧可以操作的假象,但实际上即使再次选择了下拉列表,由于其是不可操作的,它的选择的动作肯定不会传递到后台。

找到问题了,那么解决就好办了,要么把isabled="#{pvgEditManager.selectedClassString !=null}"去掉,要么把内容

pvgEditManager.selectedClassString换为另一个:例如disabled="#{pvgEditManager.status !=null}" ,当然你需要在后台定义这个status属性,通过这个status状态来控制下拉列表是否可操作。



© 著作权归作者所有

共有 人打赏支持
码上中国博客

码上中国博客

粉丝 53
博文 74
码字总数 70310
作品 1
北京
后端工程师
私信 提问
Hibernate4 中复合主键二级缓存无效

Hibernate4 中复合主键二级缓存ehcahe无效;早期是hibernate一个bug;现在应该被修复了把,但还是不行;谁有解决办法???

pnwazgx
2015/07/23
165
0
Hibernate Validator 6.0.9 发布,进一步改进性能

Hibernate Validator 6.0.9.Final 已发布,建议 6.x 版本的用户尽快升级,它是 6.0.8.Final 的直接替换版本,带来了一些不错的改进并修复 bug 。 性能改进: 进一步的性能调整,使得 Hibern...

王练
2018/03/28
760
1
IOS开发常见warning汇总

Warning: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier 解释:Storyboard中有Vie......

恋恋美食
2015/12/15
138
0
FastJson转POJO的bug

您好,现在fastjson最新版本是多少?还有我把json转成hibernate的POJO的时候出现了 com.alibaba.fastjson.JSONException: can not cast to : java.util.Set 的错误,请问有没有好的解决办法?...

徐福龙
2013/02/05
1K
2
Hibernate ORM 5.3.5.Final 发布,将被用于 WildFly 14

Hibernate ORM 5.3.5.Final 已发布,这将是 WildFly 14 中所包含的版本。 What’s new Bug 修复 HHH-12875 and HHH-12882 - Various fixes regarding support HHH-12871 - Metamodel contai......

王练
2018/08/16
447
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
1
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部