2018年2月21日 星期三

java.net.URLEncoder.encode is deprecated 排除方式

太久沒有寫連線程式了

在做參數轉換時才知 java.net.URLEncoder.encode is deprecated
查了一下只要稍為轉換一下就可以了


主要是要進行編碼時,要指定編碼格式 EX:

URLEncoder.encode("{123, abc}","UTF-8");

這樣即可進行轉碼了

2018年2月14日 星期三

Java List 插入 刪除基本觀念

當我們要針對集合進行插入及刪除時,JAVA原生就已提供相關的方法可以使用

但往往在使用時,如果基本觀念不清楚,就會不小心留下一隻大肥蟲

例如 以下的Code:
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
System.out.println(list);

當直接 output 時會顯示 [A, B, C, D, E]
如果我們進行插入時,加入F,如下範例: 

list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add(2, "F");
System.out.println(list);

這時output 會顯示 [A, B, F, C, D, E ] 他會在此List 的index 位置2 插入F  
(只要是陣列 集合都是從0開始起算)

如果我們想要先進行刪除B,如下:

list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.reomve(1);
list.add(2, "F");
System.out.println(list);

這時output 會顯示 [A, C, F,  D, E ] ,由此可證 被刪除和插入,List index 都會即時做變化
因此,在進行List處理時,如果要直接使用index異動,就要注意會有此問題
或是我們可以改用 Iterator 即可避掉刪除的問題

2017年6月27日 星期二

Apache 停機小技巧 調整 404 not Found

在網站上線後,要顧慮的就很多啦
如果網站要停機進行調整,就要寫公告訊息

而網站連結眾多,怎麼在讓使用者連結時都會顯示停機公告呢?

我們可以在停機時,指向至一個空的網站即可
當使用者連線時,就會連不上原本的網頁
這時就會出現404 找不到網頁

因此就可以將404指向至公告頁即可
有兩種作法


1.調整Httpd.conf

ErrorDocument 404 /errors/not_found.html


2.如果有開mod_rewirte  可以設定在.htaccess


ErrorDocument 404 /pages/errors/404.php

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]



參考資料:

  • https://httpd.apache.org/docs/2.4/custom-error.html
  • https://stackoverflow.com/questions/19962787/rewrite-url-after-redirecting-404-error-htaccess

2017年6月14日 星期三

如何IE8以前版本支援 Javascript .trim()


一樣處理舊系統的Bug ,一樣是萬惡的IE 搞出來的

在IE8 前 Javascript  String.trim() 似乎會無作用

所以要自己處理並宣告一下,才能正常使用

相容性作法如下:

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
 } } 


這樣即可達到相容性了

參考資料:  https://stackoverflow.com/questions/2308134/trim-in-javascript-not-working-in-ie

2017年5月24日 星期三

showModalDialog 如何改成使用window.open


showModalDialog 是無法在新版的瀏覽器上使用了,所以別再花時間找解法,真正的解法就只能改寫,即然要改寫,就有很多種作法,看是要用jquery的Dialog改,還是要用傳統的window.open來改都可以,這篇是要教你如何用最簡單的方式改寫讓網頁可以正常使用
當要改寫時,我這裡分兩部份,一為開啟,一為回傳值,可以依你的網站使用的性質進行調整。如果你的網站使用showModalDialog 非常單純,只是純粹開啟網頁這樣只要處理如何開啟的轉換即可,首先可以加上以下這段語法:
// fix for deprecated method in Chrome 37
     window.showModalDialog = function (arg1, arg2, arg3) {

        var w;
        var h;
        var resizable = "no";
        var scroll = "no";
        var status = "no";

        // get the modal specs
        var mdattrs = arg3.split(";");
        for (i = 0; i < mdattrs.length; i++) {
           var mdattr = mdattrs[i].split(":");

           var n = mdattr[0];
           var v = mdattr[1];
           if (n) { n = n.trim().toLowerCase(); }
           if (v) { v = v.trim().toLowerCase(); }

           if (n == "dialogheight") {
              h = v.replace("px", "");
           } else if (n == "dialogwidth") {
              w = v.replace("px", "");
           } else if (n == "resizable") {
              resizable = v;
           } else if (n == "scroll") {
              scroll = v;
           } else if (n == "status") {
              status = v;
           }
        }

        var left = window.screenX + (window.outerWidth / 2) - (w / 2);
        var top = window.screenY + (window.outerHeight / 2) - (h / 2);
        var targetWin = window.open(arg1, arg1, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
        targetWin.focus();
     };
這段主要是將window.showModalDialog進行宣告,如在IE會是覆寫改用此作法,這樣原本的showModalDialog都不用改code,即可運行,這樣至少不用一行一行CODE去改寫
解決了開啟之後,接下來就是回傳值了,這就沒那麼簡單,原本showModalDialog的作法是在呼叫時用變數去接回傳值,等該視窗處理完成後就會將回傳值放置該變數中,如下示意
呼叫頁(父頁)
var returnValue = window.showModalDialog(…);

處理頁(子頁)
window.returnValue = data;
window.close();

然後returnValue 就能接到值啦,是蠻方便的,但如果用window.open作就沒辦法這麼簡單做啦,改用window.open,因為視窗開啟後,其它頁面還是都能作業,所以父頁不能在那等待接值,因此要從子頁主動回傳參數才行,所以我們就要利用以下的方式進行改寫
呼叫頁(父頁)  宣告一個function 準備來接收子頁的回傳值
function setReturnValue(data){
  if (data != null)  {
        document.forms[0].elements["id"].value = data[0];
        ….
    }
}


處理頁(子頁) 在原本的window.returnValue =…  改成用
  window.opener.setReturnValue(data) ;

將值傳至父頁,這樣即可完成改寫啦,希望這篇說明能幫助到你!!

參考資料:

2017年5月23日 星期二

showModalDialog在IE11失效排除法


Javascript showModalDialog 是非正規的用法,微軟自己發明的,原本其它瀏覽器都還有支援,但在chrome v37 之後也不支援了,沒想到微軟在IE10之後自己也不支援了,真是有點給他OOXX的
所以目前一些舊網站如有使用了showModalDialog  要如何是好呢? 如果是只限IE使用的網站,最簡單的就是在網頁上強制降版使用相容性來檢視 這樣就能恢復原有的功能,只要在網頁的meta加上以下這句,這樣在開啟網頁時就會自動以IE8的相容性檢視來運行此網頁

<meta http-equiv="x-ua-compatible" content="ie=8" />

不過這個只限網站在IE瀏覽器上使用,如要在其它瀏覽器上使用,只能走上改寫一途了

2017年3月7日 星期二

CKEditor 如何設定資料無

標籤


CKEditor 預設在使用時,會在最外層加上<P> </P>
剛好遇到一個案例,是需要一行的CKEditor
當編輯好的內容於 前端顯示時,會因為<P> </P> 所以導致 呈現時 資料造成版型跑掉了

因此,要改一下參數,讓CKEditor 不要加上<P> 標籤

可以修改 CKEditor\config.js
CKEDITOR.editorConfig = function( config ) { config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER Key puts the <br/> tag config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER Keys puts the <p> tag }; 

這樣在使用編輯器時,就不會帶入<P> tag了,不過原本已存在的資料 不會讀出自行去除<P> 這還是要靠自己才行


參考資料:
https://processwire.com/talk/topic/10999-ckeditor-remove-wrapping-from-in-source-code/