因为primefaces在国内使用的并非太多,所以,国内对jsf作系统、详细的介绍的资料不多,即便有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至仍是错误的,极可能会误导使用者。css
相对来讲,看国内的那些仅仅是翻译过来的文章或书籍不如直接看国外的官方文档或资料来的实在,在我讲述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=523880497056html
页面代码以下:java
<!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码以下:jquery
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了,可是因为这个动做并无自动刷新页面,形成在页面上的下拉列表仍旧能够操做的假象,但实际上即便再次选择了下拉列表,因为其是不可操做的,它的选择的动做确定不会传递到后台。web
找到问题了,那么解决就好办了,要么把isabled="#{pvgEditManager.selectedClassString !=null}"去掉,要么把内容ajax
pvgEditManager.selectedClassString换为另外一个:例如disabled="#{pvgEditManager.status !=null}" ,固然你须要在后台定义这个status属性,经过这个status状态来控制下拉列表是否可操做。数据库