Search

Bootstrap - 自動關閉popover

2015-06-30 1:29 PM

本次要介紹的是 Bootstrap 中的 popover 元件的客製化功能

若要在 popover 失焦時 也就是 onblur 觸發時自動淡出該如何使用呢?

在 Bootstrap 本身並沒有支援這項功能

而且 DIV 本身也不支援 blur 事件

所以我們要使用另外一種方式達成相同的效果

程式碼範例
// Part 1: 初始化 popover 元件
var button = template.find(".itemInfo button");
// 加入 class name 以便下一步使用
button.addClass("popover-toggle");

var content = $("
test
"); button.popover({ container:"body", content: content, html:true, placement:"top", title:"Popover title", trigger:'click' }); // Part 2: 加入 click 事件處理 $(document).on("click", function(event){ var target = $(event.target); $.each( $(".popover-toggle"), function(index, value){ var _target = $(value); // 不是點擊按鈕或 popover 本身時關閉 popover 物件 if( !target.is( _target ) && target.closest(".popover").length == 0 ){ _target.popover("hide"); } }); });
各項資料連結
Bootstrap

Bootstrap - 修改 tooltip 樣式

2015-06-19 9:10 PM

Bootstrap 堪稱是工程師的一大福音

這是一款由 Twitter 發佈的 CSS Framework

可以讓網頁版面製作更加輕鬆與簡便

本次要介紹的是其中的客製化功能

若要使用其中的 tooltip 元件,卻又不想使用原生的顏色

例如背景顏色已經是暗色系了

使用原生的黑色 tooltip 根本就看不到

這時就可以使用以下方式修改 tooltip 的樣式

程式碼範例
// 更改背景色及文字顏色

.tooltip > .tooltip-inner {background-color: #F7F7F7; color: #333333;}
.tooltip.left .tooltip-arrow { border-left-color: #F7F7F7; }
.tooltip.top .tooltip-arrow { border-top-color: #F7F7F7; }
.tooltip.right .tooltip-arrow { border-right-color: #F7F7F7; }
.tooltip.bottom .tooltip-arrow { border-bottom-color: #F7F7F7; }


// 若僅要修改指定容器內的tooltip樣式 則使用以下方法

#map .tooltip > .tooltip-inner {background-color: #F7F7F7; color: #333333;}
#map .tooltip.left .tooltip-arrow { border-left-color: #F7F7F7; }
#map .tooltip.top .tooltip-arrow { border-top-color: #F7F7F7; }
#map .tooltip.right .tooltip-arrow { border-right-color: #F7F7F7; }
#map .tooltip.bottom .tooltip-arrow { border-bottom-color: #F7F7F7; }

// 並在初始化tooltip時將container設為#map

editBtn.tooltip({
 animation : true,
 placement : "top", 
 html : false,
 title : "Edit hotspot",
 container : "#map"
});
各項資料連結
Bootstrap

Java - Hibernate 與 log4j.properties 的設定

2015-06-10 3:44 PM

Hibernate 是一個在開發資料庫相關應用程式時的一個相當好用的 Framework

他會幫我們管理資料庫的連線, 資源的釋放, 物件的映射等等功能

可以說是族繁不及備載

這裡我們將介紹在使用 log4j 時

將如何設定以將 Hibernate 的相關資訊輸出

例如當我們想看 SQL 編寫的正不正確

或是帶入的變數有沒有問題

就可以使用這個方法查看

首先我們必須在 log4j.properties 內加入以下設定

若不清楚如何設定 log4j 可至本文章底部的各項資料連結查看教學

程式碼範例
#hibernate log  
log4j.logger.org.hibernate=ERROR 
log4j.logger.org.hibernate.SQL=ERROR  
log4j.logger.org.hibernate.hql=ERROR  
log4j.logger.org.hibernate.type=ERROR
log4j.logger.org.hibernate.type.BasicTypeRegistry=ERROR  

一般來說

若正式上線皆會設定為 ERROR

避免輸出過多不必要的資訊

而在開發或 Debug 時則可將 Log 層級修改為 DEBUG 以查看相關訊息

若要查看 Hibernate 的相關訊息, 如啟動資訊, 各種錯誤訊息 則可修改此層級

log4j.logger.org.hibernate=DEBUG 

若要查看 Hibernate 的 SQL 或 HQL 是否正確 則可修改此層級

log4j.logger.org.hibernate.SQL=DEBUG  
log4j.logger.org.hibernate.hql=DEBUG  

若要查看 SQL 內帶入的變數值是否正確 則可修改此層級

log4j.logger.org.hibernate.type=DEBUG

若要查看 SQL 內帶入的變數型態是否正確註冊 則可修改此層級

log4j.logger.org.hibernate.type.BasicTypeRegistry=DEBUG  
各項資料連結
Java - Tomcat + Spring 的 Log4j 部屬與設定
Java - log4j.properties 設定檔
Hibernate

Java - log4j.properties 設定檔

3:24 PM
在完成 Log4j 的部屬後首先要做的就是 log4j.properties 檔案的設定
這裡將解釋該如何設定 Log 的層級、格式以及輸出檔案的方法
程式碼範例
#log4j.rootLogger = [ level ] , appenderName, appenderName, ...
log4j.rootLogger = ERROR, console, rollingFile
#level=DEBUG,all can be output

#apche log  
log4j.logger.org.apache.commons=ERROR  
  
#spring log  
log4j.logger.org.springframework=ERROR  
log4j.logger.com.opensymphony=ERROR
  
#hibernate log  
log4j.logger.org.hibernate=ERROR 
log4j.logger.org.hibernate.SQL=DEBUG  
log4j.logger.org.hibernate.hql=DEBUG  
log4j.logger.org.hibernate.type=ERROR
log4j.logger.org.hibernate.type.BasicTypeRegistry=ERROR  
  
#c3p0 log  
log4j.logger.com.mchange.v2.resourcepool.BasicResourcePool=ERROR 

#others log
log4j.logger.com.mchange=ERROR

#console is set to be a ConsoleAppender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#console have four patterns
#org.apache.log4j.HTMLLayout
#org.apache.log4j.PatternLayout
#org.apache.log4j.SimpleLayout
#org.apache.log4j.TTCCLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#define the output type
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#file is set to output to a extra file
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
#the absolute route of the log4j file
#log4j.appender.rollingFile.File = /log.txt
log4j.appender.rollingFile.File = ${web.root}/WEB-INF/logs/webapp.log
#the size
log4j.appender.rollingFile.MaxFileSize = 500KB
#back up a file
log4j.appender.rollingFile.MaxBackupIndex = 50
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

Java - Tomcat + Spring 的 Log4j 部屬與設定

2:33 PM

Log4j 算是最容易上手且最被廣泛使用的 Log 套件

但很多人常常卡在不知道該如何正確的佈署相關的設定

這裡將使用 Tomcat + Spring 搭配 Log4j 的 Web 專案作為範例

千萬不要認為 Log 不重要就不去設定他

在正式上線後可是得靠這個小動作來發現問題所在

Log 的重點在精不在多 如何精準的輸出足夠的資訊作為 Log 可是非常重要的

但關於 Log 的輸出經驗談就下次再說吧

首先我們得先了解如何設定才能往下一步走

程式碼範例
<!-- spring with log4j -->
 <!-- 交由spring取得根目錄路徑 做為變數使用 -->
 <!-- param-value的名稱不可與其他專案重複 -->
 <!-- 若 Web Container 底下有多個專案使用相同名稱將會導致錯誤 -->
 <context-param>  
  <param-name>webAppRootKey</param-name>  
  <param-value>web.root</param-value>  
 </context-param>

 <!-- log4j設定擋 -->
 <!-- 此處將告訴 Spring log4j.properties 設定檔位於 classpath 底下-->
 <!-- 也就是在 Maven 開發環境中的 res 目錄內 -->
 <!-- 若要置於 WEB-INF 底下則可以使用 /WEB-INF/log4j.properties 這樣的路徑設定 -->
 <context-param> 
  <param-name>log4jConfigLocation</param-name> 
  <param-value>classpath:log4j.properties</param-value> 
 </context-param> 
   
    <!-- 重新讀取 log4j 設定檔時間(毫秒) 可不用重新啟動 Tomcat -->
 <context-param> 
  <param-name>log4jRefreshInterval</param-name> 
  <param-value>1000</param-value> 
 </context-param>

 <!-- 使用 Spring 的 Log4jConfigListener 讀取 log4j 設定 -->
    <listener> 
  <listener-class> 
  org.springframework.web.util.Log4jConfigListener 
  </listener-class> 
    </listener>
<!--  -->
各項資料連結
Spring
Apache Log4j 1.2.x
Apache Tomcat

Java - 使用 Joda time 取得指定時區

2015-06-04 10:53 AM

Joda Time 是一個相當方便的第三方套件

簡化了許多在使用原生 CalendarDate 物件時相當繁雜的步驟

本次要介紹的就是如何使用 Joda Time 套件取得特定時區的時間

程式碼範例
//取得日本時區
DateTimeZone gmt = DateTimeZone.forID( "Asia/Tokyo" );

//轉換為DateTime物件
DateTime datetime = new DateTime(gmt);

//轉換為Java Date物件
Date date = datetime.toLocalDateTime().toDate();

若是直接使用 datetime.toDate();

則會與直接使用 new Date(); 得到的日期相同

就不會使用指定時區的時間了

而會使用本機時間

這邊是需要稍微注意的地方

各項資料連結
Joda Time
Joda Time Available Time Zones
Calendar(Java Doc)
Date(Java Doc)