在做richafces的过程中,遇到了好多的问题,因为自己没有从头学起,所以好多的东西都是在实践中去明白,感觉走了点弯路,但也明白了好多的机制。
1、在jsf中页面是预先编译的,因为弹出的pananel也是预加载的,所以在pannel弹出的时候记得要刷新,只有刷新,弹出的数据才能更新。
2、bean中的get方法在预编译的时候是要调用的。
3、父类子类转换是自动的。
在做数据源的过程中,因为不同的数据源字段是不一样,所以在实现过程中有一个父类是公共字段,而子类在继承的父类的基础上加上自己特有的字段,所以添加和修改在做的过程中会比较复杂,而展现是在父类公共字段的展现,比较简单。
先看一下做出的结果:
2、看一下具体的实现
1、在底层中我们封装了数据源的接口和实现,采用了单利和外观的方式,代码如下所示:
package com.cvicse.report.ui.portal.api;
import java.util.List;
import com.cvicse.inforreport.model.datasource.Datasource;
public interface IDataSource {
/**
* 获取所有数据源列表操作
*
* @return
* @throws Exception
*/
public abstract List<Datasource> getAllDSList() throws Exception;
/**
* 获取不同数据源列表操作
*
* @param type
* :db、txt、server、soap
* @return
* @throws Exception
*/
public abstract List<Datasource> getDSList(String type) throws Exception;
/**
* 添加数据源操作
*
* @param Datasource
* :DBDatasource、TXTDatasource、ServerDatasource、WSDatasource
* @throws Exception
*/
public abstract void addDataSource(Datasource dataSource) throws Exception;
/**
* 删除数据源操作
*
* @param Datasource
* :DBDatasource、TXTDatasource、ServerDatasource、WSDatasource
* @throws Exception
*/
public abstract void deleteDataSource(Datasource dataSource)
throws Exception;
/**
* 修改数据源操作
*
* @param Datasource
* :DBDatasource、TXTDatasource、ServerDatasource、WSDatasource
* @throws Exception
*/
public abstract void editDataSource(Datasource dataSource) throws Exception;
/**
* 测试数据源操作
*
* @param Datasource
* :DBDatasource、TXTDatasource、ServerDatasource、WSDatasource
* @return
* @throws Exception
*/
public abstract String testDataSource(Datasource dataSource)
throws Exception;
/**
* 判断数据源是否存在
*
* @param Datasource
* :DBDatasource、TXTDatasource、ServerDatasource、WSDatasource
* @return
* @throws Exception
*/
public abstract boolean isExist(Datasource dataSource) throws Exception;
}
package com.cvicse.report.ui.portal.impl;
import java.util.ArrayList;
import java.util.List;
import com.cvicse.inforreport.api.IReportDatasource;
import com.cvicse.inforreport.engine.ReportEngineFactory;
import com.cvicse.inforreport.model.datasource.Datasource;
import com.cvicse.report.ui.portal.api.IDataSource;
/**
* 数据源操作的业务封装类
*
* 采用单利模式进行封装
*
*/
public class DataSourceImpl implements IDataSource {
private static IReportDatasource irds = ReportEngineFactory
.getReportDatasource();// 数据源接口
private final static IDataSource dataSourceImpl = new DataSourceImpl();
/**
* 构造方法
*/
private DataSourceImpl() {
}
/**
* 获取单例实例模式
*
* @return
*/
public static synchronized IDataSource getInstance() {
return dataSourceImpl;
}
/*
* (non-Javadoc)
*
* @see com.cvicse.report.ui.impl.IdataSource#getAllDSList()
*/
public List<Datasource> getAllDSList() throws Exception {
List<Datasource> templist = new ArrayList<Datasource>();
templist = irds.getDSList();
return templist;
}
/*
* (non-Javadoc)
*
* @see com.cvicse.report.ui.impl.IdataSource#getDSList(java.lang.String)
*/
public List<Datasource> getDSList(String type) throws Exception {
List<Datasource> templist = new ArrayList<Datasource>();
templist = irds.getDSList();
List<Datasource> DBList = new ArrayList<Datasource>();
for (Datasource datasource : templist) {
if ((type.trim()).equals(datasource.getType())) {
DBList.add(datasource);
}
}
return DBList;
}
/*
* (non-Javadoc)
*
* @see
* com.cvicse.report.ui.impl.IdataSource#addDataSourc(com.cvicse.inforreport
* .model.datasource.Datasource)
*/
public void addDataSource(Datasource dataSource) throws Exception {
irds.addDS(dataSource);
irds.store();
}
/*
* (non-Javadoc)
*
* @see
* com.cvicse.report.ui.impl.IdataSource#deleteDataSource(com.cvicse.inforreport
* .model.datasource.Datasource)
*/
public void deleteDataSource(Datasource dataSource) throws Exception {
irds.deleteDS(dataSource.getId().trim());
irds.store();
}
/*
* (non-Javadoc)
*
* @see
* com.cvicse.report.ui.impl.IdataSource#editDataSource(com.cvicse.inforreport
* .model.datasource.Datasource)
*/
public void editDataSource(Datasource dataSource) throws Exception {
irds.addDS(dataSource);
irds.store();
}
/*
* (non-Javadoc)
*
* @see
* com.cvicse.report.ui.impl.IdataSource#testDataSource(com.cvicse.inforreport
* .model.datasource.Datasource)
*/
public String testDataSource(Datasource dataSource) throws Exception {
try {
String bool = irds.testDS(dataSource.getId().trim());
if ("true".equals(bool)) {
return "数据源连接成功。";
} else {
return "数据源连接失败,可能原因是: " + bool;
}
} catch (Exception e) {
return "测试接口异常。";
}
}
/*
* (non-Javadoc)
*
* @see
* com.cvicse.report.ui.impl.IdataSource#isExist(com.cvicse.inforreport.
* model.datasource.Datasource)
*/
public boolean isExist(Datasource dataSource) throws Exception {
return irds.exists(dataSource.getId());
}
}
2、控制层bean的实现,在控制层添加了一个DBobject类做为辅助
package com.cvicse.report.ui.viewer.jsf.datasource;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ActionEvent;
import com.cvicse.inforreport.model.datasource.DBDatasource;
import com.cvicse.inforreport.model.datasource.Datasource;
import com.cvicse.inforreport.model.datasource.ServerDatasource;
import com.cvicse.inforreport.model.datasource.TXTDatasource;
import com.cvicse.inforreport.model.datasource.WSDatasource;
import com.cvicse.report.ui.portal.api.IDataSource;
import com.cvicse.report.ui.portal.impl.DataSourceImpl;
/**
*JDBC数据源Bean类
*
*/
public class DataSourceBean {
private final static String JDBC_TYPE = "db";// jdbc数据源类型
private final static String SERVER_TYPE = "server";// 服务器数据类型
private final static String TXT_TYPE = "txt";// 文本数据类型
private final static String WS_TYPE = "soap";// webservice数据类型
private final static String JDBC_PAGE = "/pages/dataSource/includes/addJdbcType.xhtml"; // jdbc页面
private final static String TXT_PAGE = "/pages/dataSource/includes/addTxtType.xhtml"; // TXT页面
private final static String SERVER_PAGE = "/pages/dataSource/includes/addServerType.xhtml";// JNDI页面
private final static String WS_PAGE = "/pages/dataSource/includes/addWSType.xhtml"; // webservice页面
private final static String ORACLE_TPYE_4 = "Oracle Type 4";
private final static String ORACLE_TPYE_4_DRIVERCLASS = "oracle.jdbc.driver.OracleDriver";
private final static String ORACLE_TPYE_4_URL = "jdbc:oracle:thin:@host:1521:yourDB";
private final static String ORACLE_OCI = "Oracle OCI";
private final static String ORACLE_OCI_DRIVERCLASS = "oracle.jdbc.driver.OracleDriver";
private final static String ORACLE_OCI_URL = "jdbc:oracle:oci8:@yourDB";
private final static String DB2_TPYE_2 = "DB2 Type 2";
private final static String DB2_TPYE_2_DRIVERCLASS = "COM.ibm.db2.jdbc.app.DB2Driver";
private final static String DB2_TPYE_2_URL = "jdbc:db2:yourDB";
private final static String DB2_TPYE_4 = "DB2 Type 4";
private final static String DB2_TPYE_4_DRIVERCLASS = "COM.ibm.db2.jdbc.net.DB2Driver";
private final static String DB2_TPYE_4_URL = "jdbc:db2://host:port/yourDB";
private final static String MySQL = "MySQL";
private final static String MySQL_DRIVERCLASS = "org.gjt.mm.mysql.Driver";
private final static String MySQL_URL = "jdbc:mysql://host:3306/yourDB";
private final static String MS_SQL_SERVER = "MS SQL Server";
private final static String MS_SQL_SERVER_DRIVERCLASS = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private final static String MS_SQL_SERVER_URL = "jdbc:microsoft:sqlserver://host:1433;DatabaseName=yourDB";
private final static String SYBASE = "Sybase";
private final static String SYBASE_DRIVERCLASS = "com.sybase.jdbc2.jdbc.SybDriver";
private final static String SYBASE_URL = "jdbc:sybase:Tds:host:port/yourDB";
private final static String INFORMIX = "Informix";
private final static String INFORMIX_DRIVERCLASS = "com.informix.jdbc.IfxDriver";
private final static String INFORMIX_URL = "jdbc:informix-sqli://host:port/yourDB:informixserver=yourServer;user=username;password=password";
private final static String HYPERSONIC_SQL = "Hypersonic SQL";
private final static String HYPERSONIC_SQL_DRIVERCLASS = "org.hsqldb.jdbcDriver";
private final static String HYPERSONIC_SQL_URL = "jdbc:hsqldb:hsql://host:1701";
private final static String JDBC_ODBC = "JDBC-ODBC";
private final static String JDBC_ODBC_DRIVERCLASS = "sun.jdbc.odbc.JdbcOdbcDriver";
private final static String JDBC_ODBC_URL = "jdbc:odbc:odbcDS";
private List<Datasource> dataSourceList = new ArrayList<Datasource>();// 数据源列表
private IDataSource irds = DataSourceImpl.getInstance();// 数据源接口
private Datasource selectedDataSource;// 选中数据源对象
private DBDatasource addDBDataSource;// 新添加数据源
private Datasource addTxtDataSource;// 新添文本数据源
private Datasource addServerDataSource;// 新添server数据源
private Datasource addWSDataSource;// 新添WS数据源
private String dataSourceType;// 数据源类型
private String drivertype;// 驱动的类型
private String testResult;// 测试链接返回值信息
private String pageSrc = JDBC_PAGE;// 页面路径地址
private DBObject dbObject;// 存储驱动类和URL的临时对象
/**
* 初始化数据源列表信息
*/
public DataSourceBean() {
dataSourceList = this.getDBList();
}
/**
* 获取数据源列表
*
* @return
*/
public List<Datasource> getDataSourceList() {
return dataSourceList;
}
/**
* 添加数据源前初始化变量
*/
public void create() {
// 初始化数据库类型
this.dataSourceType = JDBC_TYPE;
// 初始化DB数据库信息
this.addDBDataSource = new DBDatasource();
this.dbObject = new DBObject();
this.drivertype = "";
this.pageSrc = JDBC_PAGE;
// 其他数据源更新信息
this.addTxtDataSource = new TXTDatasource();// 新添文本数据源
this.addServerDataSource = new ServerDatasource();// 新添server数据源
this.addWSDataSource = new WSDatasource();// 新添WS数据源
}
/**
* 添加数据源
*
* @return
*/
public void add() {
try {
if (JDBC_TYPE.equals(dataSourceType)) {
addDBDataSource.setType(dataSourceType);
addDBDataSource.setDriverClass(dbObject.getDriverClass());
addDBDataSource.setUrl(dbObject.getUrl());
addDBDataSource.setUser(dbObject.getUser());
addDBDataSource.setPassword(dbObject.getPassword());
irds.addDataSource(addDBDataSource);
} else if (TXT_TYPE.equals(dataSourceType)) {
addTxtDataSource.setType(dataSourceType);
irds.addDataSource(addTxtDataSource);
} else if (SERVER_TYPE.equals(dataSourceType)) {
addServerDataSource.setType(dataSourceType);
irds.addDataSource(addServerDataSource);
} else if (WS_TYPE.equals(dataSourceType)) {
addWSDataSource.setType(dataSourceType);
irds.addDataSource(addWSDataSource);
}
} catch (Exception e) {
e.printStackTrace();
}
dataSourceList = this.getDBList();
}
/**
* 修改数据源
*
* @param dataSource
*/
public void edit() {
try {
if (JDBC_TYPE.equals(selectedDataSource.getType())) {
DBDatasource dbDatasource = (DBDatasource) selectedDataSource;
dbDatasource.setDriverClass(dbObject.getDriverClass());
dbDatasource.setUrl(dbObject.getUrl());
dbDatasource.setUser(dbObject.getUser());
dbDatasource.setPassword(dbObject.getPassword());
irds.editDataSource(dbDatasource);
} else {
irds.editDataSource(selectedDataSource);
}
} catch (Exception e) {
e.printStackTrace();
}
dataSourceList = this.getDBList();
}
/**
* 删除数据源
*
* @param dataSource
*/
public void delete() {
try {
irds.deleteDataSource(selectedDataSource);
} catch (Exception e) {
e.printStackTrace();
}
dataSourceList = this.getDBList();
}
/**
* 测试数据源
*
* @return
*/
public void testConnection() {
try {
this.testResult = irds.testDataSource(selectedDataSource);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取测试结果
*
* @return
*/
public String getTestResult() {
return testResult;
}
/**
* 设置测试结果
*
* @param testResult
*/
public void setTestResult(String testResult) {
this.testResult = testResult;
}
/**
* 获取添加DB类型对象
*
* @return
*/
public Datasource getAddDBDataSource() {
if (addDBDataSource == null) {
addDBDataSource = new DBDatasource();
}
return addDBDataSource;
}
/**
* 设置DB类型对象
*
* @param addDBDataSource
*/
public void setAddDBDataSource(DBDatasource addDBDataSource) {
this.addDBDataSource = addDBDataSource;
}
/**
* 获取Txt类型添加对象
*
* @return
*/
public Datasource getAddTxtDataSource() {
if (addTxtDataSource == null) {
addTxtDataSource = new TXTDatasource();
}
return addTxtDataSource;
}
/**
* 设置txt类型添加对象
*
* @param addTxtDataSource
*/
public void setAddTxtDataSource(Datasource addTxtDataSource) {
this.addTxtDataSource = addTxtDataSource;
}
/**
* 获取server类型数据源
*
* @return
*/
public Datasource getAddServerDataSource() {
if (addTxtDataSource == null) {
addTxtDataSource = new ServerDatasource();
}
return addServerDataSource;
}
/**
* 设置server数据源
*
* @param addServerDataSource
*/
public void setAddServerDataSource(Datasource addServerDataSource) {
this.addServerDataSource = addServerDataSource;
}
/**
* 获取WS数据源
*
* @return
*/
public Datasource getAddWSDataSource() {
if (addTxtDataSource == null) {
addTxtDataSource = new WSDatasource();
}
return addWSDataSource;
}
/**
* 设置ws数据源
*
* @param addWSDataSource
*/
public void setAddWSDataSource(Datasource addWSDataSource) {
this.addWSDataSource = addWSDataSource;
}
/**
* 获取其他数据源页面地址
*
* @return
*/
public String getPageSrc() {
return pageSrc;
}
/**
* 添加其他数据源页面地址
*
* @param pageSrc
*/
public void setPageSrc(String pageSrc) {
this.pageSrc = pageSrc;
}
/**
* 获取选择的数据源
*
* @return
*/
public Datasource getSelectedDataSource() {
return selectedDataSource;
}
/**
* 设置选择的数据源
*
* @param selectedDataSource
*/
public void setSelectedDataSource(Datasource selectedDataSource) {
if (JDBC_TYPE.equals(selectedDataSource.getType())) {
// 在弹出的页面调用f:setPropertyActionListener调用get方法前,对原先的对象进行清空
if (dbObject == null)
dbObject = new DBObject();
{
drivertype = "";
dbObject.setDriverClass(((DBDatasource) selectedDataSource)
.getDriverClass());
dbObject.setUrl(selectedDataSource.getUrl());
dbObject.setUser(((DBDatasource) selectedDataSource).getUser());
dbObject.setPassword(((DBDatasource) selectedDataSource)
.getPassword());
}
this.selectedDataSource = selectedDataSource;
} else if (SERVER_TYPE.equals(selectedDataSource.getType())) {
this.selectedDataSource = selectedDataSource;
} else if (TXT_TYPE.equals(selectedDataSource.getType())) {
this.selectedDataSource = selectedDataSource;
} else {
this.selectedDataSource = selectedDataSource;
}
}
/**
* 设置数据源类型
*
* @param dataSourceType
*/
public void setDataSourceType(String dataSourceType) {
this.dataSourceType = dataSourceType;
}
/**
* 获取数据源类型
*
* @return
*/
public String getDataSourceType() {
return dataSourceType;
}
/**
* 改变数据源类型
*
* @param event
*/
public void changeDBSourceType(ActionEvent event) {
if (JDBC_TYPE.equals(dataSourceType)) {
pageSrc = JDBC_PAGE;
} else if (SERVER_TYPE.equals(dataSourceType)) {
pageSrc = SERVER_PAGE;
} else if (TXT_TYPE.equals(dataSourceType)) {
pageSrc = TXT_PAGE;
} else if (WS_TYPE.equals(dataSourceType)) {
pageSrc = WS_PAGE;
}
}
/**
* 改变驱动类型
*
* @param event
*/
public void changeDriverType(ActionEvent event) {
if (ORACLE_TPYE_4.equals(drivertype)) {
dbObject.setDriverClass(ORACLE_TPYE_4_DRIVERCLASS);
dbObject.setUrl(ORACLE_TPYE_4_URL);
} else if (ORACLE_OCI.equals(drivertype)) {
dbObject.setDriverClass(ORACLE_OCI_DRIVERCLASS);
dbObject.setUrl(ORACLE_OCI_URL);
} else if (DB2_TPYE_2.equals(drivertype)) {
dbObject.setDriverClass(DB2_TPYE_2_DRIVERCLASS);
dbObject.setUrl(DB2_TPYE_2_URL);
} else if (DB2_TPYE_4.equals(drivertype)) {
dbObject.setDriverClass(DB2_TPYE_4_DRIVERCLASS);
dbObject.setUrl(DB2_TPYE_4_URL);
} else if (MySQL.equals(drivertype)) {
dbObject.setDriverClass(MySQL_DRIVERCLASS);
dbObject.setUrl(MySQL_URL);
} else if (MS_SQL_SERVER.equals(drivertype)) {
dbObject.setDriverClass(MS_SQL_SERVER_DRIVERCLASS);
dbObject.setUrl(MS_SQL_SERVER_URL);
} else if (SYBASE.equals(drivertype)) {
dbObject.setDriverClass(SYBASE_DRIVERCLASS);
dbObject.setUrl(SYBASE_URL);
} else if (INFORMIX.equals(drivertype)) {
dbObject.setDriverClass(INFORMIX_DRIVERCLASS);
dbObject.setUrl(INFORMIX_URL);
} else if (HYPERSONIC_SQL.equals(drivertype)) {
dbObject.setDriverClass(HYPERSONIC_SQL_DRIVERCLASS);
dbObject.setUrl(HYPERSONIC_SQL_URL);
} else if (JDBC_ODBC.equals(drivertype)) {
dbObject.setDriverClass(JDBC_ODBC_DRIVERCLASS);
dbObject.setUrl(JDBC_ODBC_URL);
} else {
dbObject.setDriverClass("");
dbObject.setUrl("");
}
}
/**
* 获取驱动类型
*
* @return
*/
public String getDrivertype() {
return drivertype;
}
/**
* 设置驱动类型
*
* @param drivertype
*/
public void setDrivertype(String drivertype) {
if ("".equals(drivertype))
this.drivertype = null;
else
this.drivertype = drivertype;
}
/**
* 获取当前对象
*
* @return
*/
public DBObject getDbObject() {
// 获取对象前判断对象是否为空,防止对象为空
if (dbObject == null) {
dbObject = new DBObject();
}
return dbObject;
}
/**
* 获取JDBC数据源所有的数据源
*
* @return
*/
private List<Datasource> getDBList() {
List<Datasource> DBList = new ArrayList<Datasource>();// JDBC数据源列表
try {
DBList = irds.getAllDSList();
} catch (Exception e) {
e.printStackTrace();
}
return DBList;
}
}
package com.cvicse.report.ui.viewer.jsf.datasource;
/**
* 数据库对象类 在
*/
public class DBObject {
private String driverClass;// 数据库驱动类
private String url;// 数据库url地址
private String user;// 用户名
private String password;// 密码
/**
* @return
*/
public String getDriverClass() {
return driverClass;
}
/**
* @param driverClass
*/
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
public String getUrl() {
return url;
}
/**
* @param url
*/
public void setUrl(String url) {
this.url = url;
}
/**
* @return
*/
public String getUser() {
return user;
}
/**
* @param user
*/
public void setUser(String user) {
this.user = user;
}
/**
* @return
*/
public String getPassword() {
return password;
}
/**
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
}
3、页面的展现设计,在展现过程中为了层次的清晰,我们分成了总体和部分页面的形式
(1)总体页面
databasepannel.xml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 整体显示界面 -->
<rich:tabPanel>
<rich:tab label="数据源管理">
<!-- 添加按钮 -->
<h:form
style="margin:0;padding:0;">
<div align="right">
<a4j:commandButton id="addJdbcDataSourcBt"
image="/images/icons/add.jpg" action="#{DBdataSourceBean.create}"
oncomplete="#{rich:component('DataSourceAddPanel')}.show()" immediate="true"/>
</div>
<rich:toolTip for="addJdbcDataSourcBt">新建数据源</rich:toolTip>
<a4j:keepAlive beanName="DBdataSourceBean" />
</h:form>
<!-- 显示列表 -->
<ui:include
src="/pages/dataSource/includes/list.xhtml" />
<!-- 添加页面 -->
<ui:include
src="/pages/dataSource/includes/add.xhtml" />
<!-- 修改页面 -->
<ui:include
src="/pages/dataSource/includes/editJdbcType.xhtml" />
<ui:include
src="/pages/dataSource/includes/editServerType.xhtml" />
<ui:include
src="/pages/dataSource/includes/editTxtType.xhtml" />
<ui:include
src="/pages/dataSource/includes/editWSType.xhtml" />
<!-- 删除提示 -->
<ui:include src="/pages/dataSource/includes/delete.xhtml" />
<!-- 测试链接页面-->
<ui:include src="/pages/dataSource/includes/testConection.xhtml" />
<!-- 状态提示 --> <ui:include src="/pages/util/wait.xhtml" />
</rich:tab>
</rich:tabPanel>
</ui:composition>
注意在总体页面中的添加按钮,添加过程中一定要把按钮方到form中才能有效的执行这个方法。
1、add.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 添加页面 -->
<rich:modalPanel id="DataSourceAddPanel" autosized="true" width="450">
<f:facet name="header">
<h:outputText value="添加数据源" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png" id="DBAddHideLink"
styleClass="hidelink" />
<rich:componentControl for="DataSourceAddPanel"
attachTo="DBAddHideLink" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<rich:messages style="color:red;"></rich:messages>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid id="addDBtype" columns="2">
<h:outputText value="数据源类型:" />
<h:selectOneMenu id="dbSourceType" style="width:250px"
value="#{DBdataSourceBean.dataSourceType}" immediate="true">
<a4j:support event="onchange"
actionListener="#{DBdataSourceBean.changeDBSourceType}"/>
<f:selectItem itemValue="db" itemLabel="db" />
<f:selectItem itemValue="server" itemLabel="server" />
<f:selectItem itemValue="txt" itemLabel="txt" />
<f:selectItem itemValue="soap" itemLabel="soap" />
</h:selectOneMenu>
<ui:include src="#{DBdataSourceBean.pageSrc}"/>
</h:panelGrid>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
</rich:modalPanel>
</ui:composition>
2、addJDBCType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:outputText value="数据源名称:" />
<h:inputText id="addJdbcNameInput"
value="#{DBdataSourceBean.addDBDataSource.id}" style="width:250px"
maxlength="50" />
<h:outputText value="驱动类型:" />
<h:selectOneMenu id="addJdbcDriverType" style="width:250px"
value="#{DBdataSourceBean.drivertype}" immediate="true">
<a4j:support event="onchange"
actionListener="#{DBdataSourceBean.changeDriverType}"
reRender="addJdbcDriverClassInput,addJdbcUrlInput" />
<f:selectItem itemValue="" itemLabel="----------选择驱动类型----------" />
<f:selectItem itemValue="Oracle Type 4" itemLabel="Oracle Type 4" />
<f:selectItem itemValue="Oracle OCI" itemLabel="Oracle OCI" />
<f:selectItem itemValue="DB2 Type 2" itemLabel="DB2 Type 2" />
<f:selectItem itemValue="DB2 Type 4" itemLabel="DB2 Type 4" />
<f:selectItem itemValue="MySQL" itemLabel="MySQL" />
<f:selectItem itemValue="MS SQL Server" itemLabel="MS SQL Server" />
<f:selectItem itemValue="Sybase" itemLabel="Sybase" />
<f:selectItem itemValue="Informix" itemLabel="Informix" />
<f:selectItem itemValue="Hypersonic SQL" itemLabel="Hypersonic SQL" />
<f:selectItem itemValue="JDBC-ODBC" itemLabel="JDBC-ODBC" />
<f:selectItem itemValue="other" itemLabel="other" />
</h:selectOneMenu>
<h:outputText value="驱动类:" />
<h:inputText id="addJdbcDriverClassInput"
value="#{DBdataSourceBean.dbObject.driverClass}" style="width:250px"
maxlength="80" />
<h:outputText value="URL:" />
<h:inputText id="addJdbcUrlInput"
value="#{DBdataSourceBean.dbObject.url}" style="width:250px"
maxlength="80" />
<h:outputText value="用户名:" />
<h:inputText id="addJdbcUerInput"
value="#{DBdataSourceBean.dbObject.user}" style="width:250px"
maxlength="30" />
<h:outputText value="密码:" />
<h:inputSecret id="addJdbcPasswordInput"
value="#{DBdataSourceBean.dbObject.password}" style="width:250px"
maxlength="30" />
<h:outputText value="备注:" />
<h:inputText id="addJdbcDescriptionInput"
value="#{DBdataSourceBean.addDBDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="添加" action="#{DBdataSourceBean.add}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('DataSourceAddPanel')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('DataSourceAddPanel')}.hide();return false" />
</h:panelGrid>
</ui:composition>
3、addServerType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:outputText value="数据源名称:" />
<h:inputText id="addTxtNameInput"
value="#{DBdataSourceBean.addServerDataSource.id}" style="width:250px"
maxlength="50" />
<h:outputText value="JNDI名字:" />
<h:inputText id="addServerUrlInput"
value="#{DBdataSourceBean.addServerDataSource.url}" style="width:250px"
maxlength="80" />
<h:outputText value="备注:" />
<h:inputText id="addServerDescriptionInput"
value="#{DBdataSourceBean.addServerDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="添加" action="#{DBdataSourceBean.add}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('DataSourceAddPanel')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('DataSourceAddPanel')}.hide();return false" />
</h:panelGrid>
</ui:composition>
4、addTxtTpe.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:outputText value="数据源名称:" />
<h:inputText id="addTxtNameInput"
value="#{DBdataSourceBean.addTxtDataSource.id}" style="width:250px"
maxlength="50" />
<h:outputText value="路径:" />
<h:inputText id="addTxtUrlInput"
value="#{DBdataSourceBean.addTxtDataSource.url}" style="width:250px"
maxlength="80" />
<h:outputText value="备注:" />
<h:inputText id="addTxtDescriptionInput"
value="#{DBdataSourceBean.addTxtDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="添加" action="#{DBdataSourceBean.add}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('DataSourceAddPanel')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('DataSourceAddPanel')}.hide();return false" />
</h:panelGrid>
</ui:composition>
5、addWStype.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:outputText value="数据源名称:" />
<h:inputText id="addsoapNameInput"
value="#{DBdataSourceBean.addWSDataSource.id}" style="width:250px"
maxlength="50" />
<h:outputText value="SOAP URL:" />
<h:inputText id="addsoapUrlInput"
value="#{DBdataSourceBean.addWSDataSource.url}" style="width:250px"
maxlength="80" />
<h:outputText value="备注:" />
<h:inputText id="addsoapDescriptionInput"
value="#{DBdataSourceBean.addWSDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="添加" action="#{DBdataSourceBean.add}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('DataSourceAddPanel')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('DataSourceAddPanel')}.hide();return false" />
</h:panelGrid>
</ui:composition>
6、delete.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 删除提示 -->
<rich:modalPanel id="jdbcDeletePanel" autosized="true" width="250"
height="60" moveable="false" resizeable="false">
<f:facet name="header">
<h:outputText value="提示" style="padding-right:15px;" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
styleClass="hidelink" id="jdbcDeleteHideLink" />
<rich:componentControl for="jdbcDeletePanel" attachTo="jdbcDeleteHideLink"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<table width="100%">
<tbody>
<tr>
<td colspan="2" align="center"><h:outputText
value="确实要删除选中的列表?" /></td>
</tr>
<tr>
<td align="center" width="50%"><a4j:commandButton value="确定"
ajaxSingle="true" action="#{DBdataSourceBean.delete}"
oncomplete="#{rich:component('jdbcDeletePanel')}.hide();"
reRender="DbdatasourceTableList" /></td>
<td align="center" width="50%"><a4j:commandButton value="取消"
οnclick="#{rich:component('jdbcDeletePanel')}.hide();return false;" />
</td>
</tr>
</tbody>
</table>
</h:form>
</rich:modalPanel>
</ui:composition>
7.editJDBCType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 修改页面 -->
<rich:modalPanel id="dbEditPannal" autosized="true"
width="450">
<f:facet name="header">
<h:outputText value="修改数据源" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
id="dbEditHideLink" styleClass="hidelink" />
<rich:componentControl for="dbEditPannal"
attachTo="dbEditHideLink" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<rich:messages style="color:red;"></rich:messages>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid columns="2">
<h:outputText value="名称:" />
<h:inputText id="editdbNameInput"
value="#{DBdataSourceBean.selectedDataSource.id}" disabled="true"
style="width:250px" maxlength="50" />
<h:outputText value="数据源类型:" />
<h:inputText id="editdbTypeInput"
value="#{DBdataSourceBean.selectedDataSource.type}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="驱动类型:" />
<h:selectOneMenu id="editdbDriverType" style="width:250px"
value="#{DBdataSourceBean.drivertype}" immediate="true">
<a4j:support event="onchange"
actionListener="#{DBdataSourceBean.changeDriverType}"
reRender="editdbDriverClassInput,editdbUrlInput" />
<f:selectItem itemValue="" itemLabel="----------选择驱动类型----------" />
<f:selectItem itemValue="Oracle Type 4" itemLabel="Oracle Type 4" />
<f:selectItem itemValue="Oracle OCI" itemLabel="Oracle OCI" />
<f:selectItem itemValue="DB2 Type 2" itemLabel="DB2 Type 2" />
<f:selectItem itemValue="DB2 Type 4" itemLabel="DB2 Type 4" />
<f:selectItem itemValue="MySQL" itemLabel="MySQL" />
<f:selectItem itemValue="MS SQL Server" itemLabel="MS SQL Server" />
<f:selectItem itemValue="Sybase" itemLabel="Sybase" />
<f:selectItem itemValue="Informix" itemLabel="Informix" />
<f:selectItem itemValue="Hypersonic SQL"
itemLabel="Hypersonic SQL" />
<f:selectItem itemValue="db-ODBC" itemLabel="db-ODBC" />
<f:selectItem itemValue="other" itemLabel="other" />
</h:selectOneMenu>
<h:outputText value="驱动类:" />
<h:inputText id="editdbDriverClassInput"
value="#{DBdataSourceBean.dbObject.driverClass}"
style="width:250px" maxlength="80" />
<h:outputText value="URL:" />
<h:inputText id="editdbUrlInput"
value="#{DBdataSourceBean.dbObject.url}" style="width:250px"
maxlength="80" />
<h:outputText value="用户名:" />
<h:inputText id="editdbUerInput"
value="#{DBdataSourceBean.dbObject.user}"
style="width:250px" maxlength="30" />
<h:outputText value="密码:" />
<h:inputSecret id="editdbPasswordInput"
value="#{DBdataSourceBean.dbObject.password}"
style="width:250px" maxlength="30" redisplay="true"/>
<h:outputText value="描述:" />
<h:inputText id="editdbDescriptionInput"
value="#{DBdataSourceBean.selectedDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="保存" action="#{DBdataSourceBean.edit}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('dbEditPannal')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('dbEditPannal')}.hide();return false" />
</h:panelGrid>
</h:panelGrid>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
</rich:modalPanel>
</ui:composition>
8、editServerType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 修改页面 -->
<rich:modalPanel id="serverEditPannal" autosized="true"
width="450">
<f:facet name="header">
<h:outputText value="修改数据源" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
id="serverEditHideLink" styleClass="hidelink" />
<rich:componentControl for="serverEditPannal"
attachTo="serverEditHideLink" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<rich:messages style="color:red;"></rich:messages>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid columns="2">
<h:outputText value="名称:" />
<h:inputText id="editserverNameInput"
value="#{DBdataSourceBean.selectedDataSource.id}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="数据源类型:" />
<h:inputText id="editserverTypeInput"
value="#{DBdataSourceBean.selectedDataSource.type}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="JNDI名字:" />
<h:inputText id="editserverUrlInput"
value="#{DBdataSourceBean.selectedDataSource.url}"
style="width:250px" maxlength="80" />
<h:outputText value="描述:" />
<h:inputText id="editserverDescriptionInput"
value="#{DBdataSourceBean.selectedDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="保存"
action="#{DBdataSourceBean.edit}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('serverEditPannal')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('serverEditPannal')}.hide();return false" />
</h:panelGrid>
</h:panelGrid>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
</rich:modalPanel>
</ui:composition>
9、editTxtType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 修改页面 -->
<rich:modalPanel id="txtEditPannal" autosized="true"
width="450">
<f:facet name="header">
<h:outputText value="修改数据源" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
id="txtEditHideLink" styleClass="hidelink" />
<rich:componentControl for="txtEditPannal"
attachTo="txtEditHideLink" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<rich:messages style="color:red;"></rich:messages>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid columns="2">
<h:outputText value="名称:" />
<h:inputText id="edittxtNameInput"
value="#{DBdataSourceBean.selectedDataSource.id}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="数据源类型:" />
<h:inputText id="edittxtTypeInput"
value="#{DBdataSourceBean.selectedDataSource.type}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="URL路径:" />
<h:inputText id="edittxtUrlInput"
value="#{DBdataSourceBean.selectedDataSource.url}"
style="width:250px" maxlength="80" />
<h:outputText value="描述:" />
<h:inputText id="edittxtDescriptionInput"
value="#{DBdataSourceBean.selectedDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="保存"
action="#{DBdataSourceBean.edit}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('txtEditPannal')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('txtEditPannal')}.hide();return false" />
</h:panelGrid>
</h:panelGrid>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
</rich:modalPanel>
</ui:composition>
10.editWSType.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 修改页面 -->
<rich:modalPanel id="soapEditPannal" autosized="true"
width="450">
<f:facet name="header">
<h:outputText value="修改数据源" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
id="soapEditHideLink" styleClass="hidelink" />
<rich:componentControl for="soapEditPannal"
attachTo="soapEditHideLink" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<rich:messages style="color:red;"></rich:messages>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid columns="2">
<h:outputText value="名称:" />
<h:inputText id="editsoapNameInput"
value="#{DBdataSourceBean.selectedDataSource.id}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="数据源类型:" />
<h:inputText id="editsoapTypeInput"
value="#{DBdataSourceBean.selectedDataSource.type}"
disabled="true" style="width:250px" maxlength="50" />
<h:outputText value="SOAP地址:" />
<h:inputText id="editsoapUrlInput"
value="#{DBdataSourceBean.selectedDataSource.url}"
style="width:250px" maxlength="80" />
<h:outputText value="描述:" />
<h:inputText id="editsoapDescriptionInput"
value="#{DBdataSourceBean.selectedDataSource.description}"
style="width:250px" maxlength="30" />
<h:panelGrid columns="2">
<a4j:commandButton value="保存"
action="#{DBdataSourceBean.edit}"
reRender="DbdatasourceTableList"
oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('soapEditPannal')}.hide();" />
<a4j:commandButton value="关闭"
οnclick="#{rich:component('soapEditPannal')}.hide();return false" />
</h:panelGrid>
</h:panelGrid>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
</rich:modalPanel>
</ui:composition>
11、list。xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 显示列表页面 -->
<h:form>
<rich:dataTable id="DbdatasourceTableList"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
cellpadding="0" cellspacing="0" width="100%" border="0"
value="#{DBdataSourceBean.dataSourceList}" var="jdbcDataSource">
<f:facet name="header">
<h:outputText value="数据源列表" />
</f:facet>
<rich:column>
<f:facet name="header">
<h:outputText value="名称" />
</f:facet>
<h:outputText id="jdbcName" value="#{jdbcDataSource.id}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="类型" />
</f:facet>
<h:graphicImage
value="/images/icons/#{jdbcDataSource.type}.png"/>
<h:outputText id="jdbcType" value="#{jdbcDataSource.type}" />
</rich:column>
<rich:column width="40%"
style="word-wrap: break-word; word-break: break-all;">
<f:facet name="header">
<h:outputText value="URL地址" />
</f:facet>
<h:outputText id="jdbcUrl" value="#{jdbcDataSource.url}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="描述" />
</f:facet>
<h:outputText id="jdbcDescription"
value="#{jdbcDataSource.description}" />
</rich:column>
<rich:column width="95">
<f:facet name="header">
<h:outputText value="操作" />
</f:facet>
<a4j:commandLink ajaxSingle="true" id="editForJdbcLink"
oncomplete="Richfaces.showModalPanel('#{DBdataSourceBean.selectedDataSource.type}'+'EditPannal');"
style="margin-left:10;margin-right:5;">
<h:graphicImage value="/images/icons/database_edit.png"
style="border:0" />
<f:setPropertyActionListener value="#{jdbcDataSource}"
target="#{DBdataSourceBean.selectedDataSource}" />
</a4j:commandLink>
<rich:toolTip for="editForJdbcLink">修改数据源</rich:toolTip>
<a4j:commandLink ajaxSingle="true" id="deleteForJdbcLink"
oncomplete="#{rich:component('jdbcDeletePanel')}.show()"
style="margin-left:5;margin-right:5;">
<h:graphicImage value="/images/icons/database_delete.png"
style="border:0" />
<f:setPropertyActionListener value="#{jdbcDataSource}"
target="#{DBdataSourceBean.selectedDataSource}" />
</a4j:commandLink>
<rich:toolTip for="deleteForJdbcLink">删除数据源</rich:toolTip>
<a4j:keepAlive beanName="DBdataSourceBean" />
<a4j:commandLink ajaxSingle="true" id="testForJdbcLink"
action="#{DBdataSourceBean.testConnection}"
oncomplete="#{rich:component('testJdbcConectionPanel')}.show()"
reRender="testJdbcData" style="margin-left:5;margin-right:10;">
<h:graphicImage value="/images/icons/database_connect.png"
style="border:0" />
<f:setPropertyActionListener value="#{jdbcDataSource}"
target="#{DBdataSourceBean.selectedDataSource}" />
</a4j:commandLink>
<rich:toolTip for="testForJdbcLink">测试数据源</rich:toolTip>
<a4j:keepAlive beanName="DBdataSourceBean" />
</rich:column>
</rich:dataTable>
</h:form>
</ui:composition>
在list中的修改时,注意一定要keepalive标签,另外,不同的类型展现不同的修改页面也一定要记住这种写法。另外,图形表面的图标在页面中的加载方式的写法也要注意。
12、testConenction。xhtml的xhtml页
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<!-- 测试提示 -->
<rich:modalPanel id="testJdbcConectionPanel" autosized="true" width="250"
height="100" moveable="false" resizeable="false">
<f:facet name="header">
<h:outputText value="提示" style="padding-right:15px;" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/modal/close.png"
styleClass="hidelink" id="testJdbcHideLink" />
<rich:componentControl for="testJdbcConectionPanel" attachTo="testJdbcHideLink"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<table width="100%">
<tbody>
<tr>
<td align="center"><h:outputText
value="#{DBdataSourceBean.testResult}" id="testJdbcData" /></td>
</tr>
<tr>
<td align="center"><a4j:commandButton value="关闭"
οnclick="#{rich:component('testJdbcConectionPanel')}.hide();return false;" />
</td>
</tr>
</tbody>
</table>
</h:form>
</rich:modalPanel>
</ui:composition>
总结:自己做的东西,在摸索中会遇到很多的知识,通过这个方法自己能更清楚的了解其中的原理。不过,在闲暇的时间要返回头去看看基础,会有更清楚的认识。