1 . 文字位置
http://stackoverflow.com/questions/12829608/bootstrap-text-align-class
2017年2月22日 星期三
2017年2月21日 星期二
Bootstrap-基本用法( 一 )
必須先在頁面添加以下 Library
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
參考資料:Bootstrap Get Started
參考資料:利用Bootstrap Grid System排版的學習筆記
AngularJS-常用方法
1 . 點擊觸發兩方法:
http://stackoverflow.com/questions/17584432/using-ng-click-to-call-two-different-functions
2 . 表格格式錯誤提醒
http://wijmo.com/blog/easy-form-validation-in-angularjs/
3 . 點擊後,檢查表格後執行方法(Nikos Paraskevopoulos)
http://stackoverflow.com/questions/31159006/form-validation-on-ng-click-angularjs
3-1 . 確認表格輸入參數_最有效
https://jsfiddle.net/r8d1uq0L/
4 . no-repeat list
https://blog.rjmetrics.com/2015/09/02/8-features-of-ng-repeat/
5 . no-repeat 動態篩選
https://docs.angularjs.org/api/ng/filter/filter
6 . no-repeat table click 取得當列參數
http://stackoverflow.com/questions/15288047/angularjs-ng-click-on-repeat-table-row-not-working
7 . no-repeat list has if els 產生列表遇到判斷式
http://stackoverflow.com/questions/15810278/if-else-statement-in-angularjs-templates
8 . no-repeat filiter 排序 筆數...等教學
http://abgne.tw/angularjs/angularjs-getting-stared/filters-3.html
9 . no-repeat table 多項排序
http://stackoverflow.com/questions/31074578/how-to-reverse-sort-a-column-on-click-using-angularjs
10 . no-repeat 上下排序
https://scotch.io/tutorials/sort-and-filter-a-table-using-angular
10_1 . no-repeat 多重篩選
http://plnkr.co/edit/kozaU39E74yqjZCpgDqM?p=preview
11 . 下拉選單_初始化...等
http://jsfiddle.net/840cc677/9/
12 . angularJS function retrun
http://stackoverflow.com/questions/24215197/how-to-show-return-value-of-a-function-with-angularjs
13 . 顯示/隱藏元件
http://stackoverflow.com/questions/16660826/show-hidden-div-on-ng-click-within-ng-repeat
http://stackoverflow.com/questions/23035647/angularjs-ng-click-and-ng-show-to-show-a-div
14 . controller 互相溝通_第四點較常用
http://www.storagelab.org.cn/zhangdi/2014/11/19/%E4%B8%8D%E5%90%8Ccontroller%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%B9%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E7%9A%84%E6%96%B9%E5%BC%8F/
3-1 . 確認表格輸入參數_最有效
https://jsfiddle.net/r8d1uq0L/
4 . no-repeat list
https://blog.rjmetrics.com/2015/09/02/8-features-of-ng-repeat/
5 . no-repeat 動態篩選
https://docs.angularjs.org/api/ng/filter/filter
6 . no-repeat table click 取得當列參數
http://stackoverflow.com/questions/15288047/angularjs-ng-click-on-repeat-table-row-not-working
7 . no-repeat list has if els 產生列表遇到判斷式
http://stackoverflow.com/questions/15810278/if-else-statement-in-angularjs-templates
8 . no-repeat filiter 排序 筆數...等教學
http://abgne.tw/angularjs/angularjs-getting-stared/filters-3.html
9 . no-repeat table 多項排序
http://stackoverflow.com/questions/31074578/how-to-reverse-sort-a-column-on-click-using-angularjs
10 . no-repeat 上下排序
https://scotch.io/tutorials/sort-and-filter-a-table-using-angular
10_1 . no-repeat 多重篩選
http://plnkr.co/edit/kozaU39E74yqjZCpgDqM?p=preview
11 . 下拉選單_初始化...等
http://jsfiddle.net/840cc677/9/
12 . angularJS function retrun
http://stackoverflow.com/questions/24215197/how-to-show-return-value-of-a-function-with-angularjs
13 . 顯示/隱藏元件
http://stackoverflow.com/questions/16660826/show-hidden-div-on-ng-click-within-ng-repeat
http://stackoverflow.com/questions/23035647/angularjs-ng-click-and-ng-show-to-show-a-div
14 . controller 互相溝通_第四點較常用
http://www.storagelab.org.cn/zhangdi/2014/11/19/%E4%B8%8D%E5%90%8Ccontroller%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%B9%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E7%9A%84%E6%96%B9%E5%BC%8F/
angular.module("myApp", [])
.controller('myCtrl', ['$scope', function($scope) {
$scope.submit = function() {
}
}]);
2017年2月20日 星期一
JavaScript-常用方法
項目
1 . 頁面初始化
2 . 取得對應標籤參數
3 . 點擊事件
4 . Form 傳送資料,另一頁面接收( Jsp、Struts2 )
頁面初始化
取得對應標籤參數
點擊事件
Form 傳送資料,另一頁面接收( Jsp、Struts2 )
參考資料:How to pass the values from one jsp page to another jsp without submit button?
1 . 頁面初始化
2 . 取得對應標籤參數
3 . 點擊事件
4 . Form 傳送資料,另一頁面接收( Jsp、Struts2 )
頁面初始化
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
});
</script>
<body>
</body>
</html>
取得對應標籤參數
<script>
.
var age = document.getElementById("editText").value;
.
</script>
<body>
.
<input type="text" id="editText" value="" />
.
</body>
點擊事件
<script>
function myFunction() {
.
.
.
}
</script>
<body>
<input type="button" id="btn" value="送出" onclick="myFunction()" />
</body>
</html>
Form 傳送資料,另一頁面接收( Jsp、Struts2 )
參考資料:How to pass the values from one jsp page to another jsp without submit button?
a.jsp
<form action="hello_4" method="post">
<input type="text" name="name">
<input type="submit" name="send">
</form>
b.jsp
<body>
<% String name=request.getParameter("name"); out.print("Hello:"+name); %>
</body>
2017年2月19日 星期日
JAVA-Struts2 入門初體驗 ( 四 )__參數傳遞__Jsp to Action
在上述幾篇講到有關如何建置 Strut2 的專案
此篇會提到要如何 收 / 送 資料
我們先來講要如何把頁面資料送至後端處理,方法:
1 . 用網頁標籤內的 name 來對應到 Action 內的 Value ( get / set )
2 . 用網頁標籤內的 name 來對應到 Action 內的 Bean ( get / set )
3 . 用網頁的表單方式統捆起來後 Action 實作 Module( form get/set )
簡單分析以上幾種方法
1 . 如果用第一種,之後 Action 一定看起來凌亂不堪,但初學好入手。
2 . 第二與第三差別在於頁面宣告的長度
以下我們就針對以上方法寫下範例:
1 . 用一般參數 set/get
仔細看 Action 部分,如果只有兩個參數還好,如果是十幾個?
整體偏程式碼都被 set /get 塞爆了
hello.jsp
Action.java
說明:Jsp 的標籤名稱對應在 Action 內,並且設置 Set / Get
2 . 用 Bean 來
User.java
說明:
Action.java
說明:
3 . Module
User
同上方法 User.java
Action
參考資料:Struts2的三种传值方式比较(附demo)
參考資料:struts2 actions - Multiple Methods & Multiple classes
此篇會提到要如何 收 / 送 資料
我們先來講要如何把頁面資料送至後端處理,方法:
1 . 用網頁標籤內的 name 來對應到 Action 內的 Value ( get / set )
2 . 用網頁標籤內的 name 來對應到 Action 內的 Bean ( get / set )
3 . 用網頁的表單方式統捆起來後 Action 實作 Module( form get/set )
簡單分析以上幾種方法
1 . 如果用第一種,之後 Action 一定看起來凌亂不堪,但初學好入手。
2 . 第二與第三差別在於頁面宣告的長度
以下我們就針對以上方法寫下範例:
1 . 用一般參數 set/get
仔細看 Action 部分,如果只有兩個參數還好,如果是十幾個?
整體偏程式碼都被 set /get 塞爆了
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 皆可使用,二選一
<form action="hello" method="post" name="form">
姓名: <input type="text" name="userName" /><br/>
電話: <input type="text" name="userPhone" /><br/>
<input type="submit" value="提交"/><br/>
</form>
-->
<!-- struts 標籤 </form>
<form action="hello" method="post" name="form">
姓名: <s:textfield name="userName"/><br/>
電話: <s:textfield name="userPhone"/><br/>
<s:submit value="提交"/> <br/>
</form>
</body>
</html>
Action.java
說明:Jsp 的標籤名稱對應在 Action 內,並且設置 Set / Get
package com.brian.example.action;
public class HelloAction {
private String userName;
private String userPhone;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
.( userPhone set/get )
.
.
.
public String execute() {
System.out.println(getUserName() + "," + getUserPhone());
return "success";
}
}
2 . 用 Bean 來
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="hello" method="post">
姓名: <s:textfield name="user.userName"/><br/>
電話: <s:textfield name="user.userPhone"/><br/>
<s:submit value="提交"/> <br/>
</form>
</body>
</html>
User.java
說明:
package com.brian.example.action;
public class User {
private String userName;
private String userPhone;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
}
Action.java
說明:
package com.brian.example.action;
public class HelloAction {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() {
try {
if(user.getUserName() != null || user.getUserPhone() != null) {
System.out.println(user.getUserName() + " : " + user.getUserPhone() );
}
} catch (Exception e ) {
System.out.println(e.toString());
}
return "success";
}
}
3 . Module
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="hello" method="post" name="user">
姓名: <s:textfield name="userName"/><br/>
電話: <s:textfield name="userPhone"/><br/>
<s:submit value="提交"/> <br/>
</form>
</body>
</html>
User
同上方法 User.java
Action
package com.brian.example.action;
import com.opensymphony.xwork2.ModelDriven;
public class HelloAction implements ModelDriven<User> {
private User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public User getModel() {
return user;
}
public String execute() {
try {
if (user.getUserName() != null || user.getUserPhone() != null) {
System.out.println(user.getUserName() + " : " + user.getUserPhone());
}
} catch (Exception e) {
System.out.println(e.toString());
}
return "success";
}
}
參考資料:Struts2的三种传值方式比较(附demo)
參考資料:struts2 actions - Multiple Methods & Multiple classes
2017年2月18日 星期六
Spring_Struts2_Hebernat_資源配置
此章節是把練習常用的 maven 集合在一起
如果要使用
起把不必要的去除
web.xml
spring mvc 不適用
只需看 pom.xml 和 web.xml 擺放位置
歡迎轉載,請註明出處。
如果要使用
起把不必要的去除
<dependencies>
<!-- Spring core & mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<!-- Servlet Spec -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- Json -->
<!-- <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId>
<version>2.8.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId> <version>2.8.5</version>
</dependency> -->
<dependency><!-- jackson -->
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.4.2</version>
</dependency>
<!-- 添加JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.1.8</version>
</dependency>
</dependencies>
web.xml
spring mvc 不適用
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Struts 2 Web Application</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
只需看 pom.xml 和 web.xml 擺放位置
歡迎轉載,請註明出處。
JQuery-遇到的問題彙整
身分證
http://liaosankai.pixnet.net/blog/post/24165900-%E8%BA%AB%E4%BB%BD%E8%AD%89%E9%A9%97%E8%AD%89%E7%A8%8B%E5%BC%8F-for-javascript-(%E7%B2%BE%E7%B0%A1%E7%89%88)
checkbox radio 參數 (name : Jaskaran singh Rajal)
http://stackoverflow.com/questions/2834350/get-checkbox-value-in-jquery
Two listBox
http://esausilva.com/2016/01/29/move-items-between-two-listbox-using-jquery-html-select-tag/
日期元件
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_input_date_value2
日期檢查
http://www.jquerybyexample.net/2011/10/validate-date-format-using-jquery.html
http://liaosankai.pixnet.net/blog/post/24165900-%E8%BA%AB%E4%BB%BD%E8%AD%89%E9%A9%97%E8%AD%89%E7%A8%8B%E5%BC%8F-for-javascript-(%E7%B2%BE%E7%B0%A1%E7%89%88)
checkbox radio 參數 (name : Jaskaran singh Rajal)
http://stackoverflow.com/questions/2834350/get-checkbox-value-in-jquery
Two listBox
http://esausilva.com/2016/01/29/move-items-between-two-listbox-using-jquery-html-select-tag/
日期元件
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_input_date_value2
日期檢查
http://www.jquerybyexample.net/2011/10/validate-date-format-using-jquery.html
Android-工具彙整
Android Studio相见恨晚的操作锦集(9月22日更新)
http://www.jianshu.com/p/bc8f6bfe12c6?
Android攻城狮—全套必备神级工具(开发,插件,效率)
http://www.jianshu.com/p/0911efbf8009
Android开发人员不得不收集的代码(持续更新中)
http://www.jianshu.com/p/72494773aace
Gradle 完整指南(Android)
http://www.jianshu.com/p/9df3c3b6067a
Java中的多线程你只要看这一篇就够了
http://www.jianshu.com/p/40d4c7aebd66
Android开发架构规范
http://www.jianshu.com/p/99239b9c1630
Gradle隱藏KeyStore
http://www.jianshu.com/p/c848c021a2a0
AndroidStudio 混淆
http://www.jianshu.com/p/f9438603e096
编译时间从33.8秒降到4.5秒我只多做了一件事
http://mp.weixin.qq.com/s/CERa-5jVXoxBj9vgnL_Kiw
Android 初學網
http://www.vogella.com/tutorials/Android/article.html
Android 6.0 權限
https://litotom.com/2016/05/15/android-6-permission/
Android NoSQL
http://www.ithome.com.tw/news/92507
bottomnavigation
http://chirag-limbachiya.blogspot.com/2017/07/bottomnavigation-with-kotlin-use.html
http://www.jianshu.com/p/0911efbf8009
Android开发人员不得不收集的代码(持续更新中)
http://www.jianshu.com/p/72494773aace
Gradle 完整指南(Android)
http://www.jianshu.com/p/9df3c3b6067a
Java中的多线程你只要看这一篇就够了
http://www.jianshu.com/p/40d4c7aebd66
Android开发架构规范
http://www.jianshu.com/p/99239b9c1630
Gradle隱藏KeyStore
http://www.jianshu.com/p/c848c021a2a0
AndroidStudio 混淆
http://www.jianshu.com/p/f9438603e096
编译时间从33.8秒降到4.5秒我只多做了一件事
http://mp.weixin.qq.com/s/CERa-5jVXoxBj9vgnL_Kiw
Android 初學網
http://www.vogella.com/tutorials/Android/article.html
Android 6.0 權限
https://litotom.com/2016/05/15/android-6-permission/
Android NoSQL
http://www.ithome.com.tw/news/92507
bottomnavigation
http://chirag-limbachiya.blogspot.com/2017/07/bottomnavigation-with-kotlin-use.html
Android-AndroidStudio 單元測試__JUnit
大家完成獨一無二的行動裝置方向後
想必針對某功能或某動作持續測試
以避免錯誤的發生
但是持續手動測試真的很沒有效率
但將測試程式寫至主程式內
不僅影響開發測試速度
如果是大量的測試那更加讓費時間
這時我們就會拉出獨立測試環境
讓他自己執行相關程式
我們專注於自己的開發
最後只需等待測試結果就可以了
說到這裡
我們先簡單說明一下此章節目的
1 . 如何使用 AndroidStudio 進行測試單元
2 . 介紹 AndroidStudio 測試單元
3 . AndroidStudio 測試的項目
1 . 如何使用 AndroidStudio 進行測試單元
首先我們要先在 gradle 匯入基本套件
2 . 介紹 AndroidStudio 測試單元
AndroidStudio 測試單元有分別:
1 ) 一般 Java 測試:也就是 Junit,基本上和 Android UI 操作無關。
2 ) Android 流程操作:顧名思義,直接操控 App 執行對應的操作。
1 ) 一般 Java 測試
首先先在 src 底下添加我們要測試的 Class
紅色區塊:執行步驟。
橘色區塊:執行結果。綠色正常,紅色有問題。
黃色區塊:執行內容。
最主要是用註記來判斷要執行的動作,常用註記如下:
@BeforeClass:方法首先被執行,只執行一次。
@AfterClass:方法最後被執行,只執行一次。
@Before:每執行 Test 前執行一次。
@After:每執行 Test 後執行一次。
@Test:測試的功能內容。
@BeforeClass/@AfterClass 都要皆為 static。
測試程式碼
結果如下:
參考資料:Android Studio单元测试入门
參考資料:Android 单元测试: 首先,从是什么开始
參考資料:Activity 测试系列教程
想必針對某功能或某動作持續測試
以避免錯誤的發生
但是持續手動測試真的很沒有效率
但將測試程式寫至主程式內
不僅影響開發測試速度
如果是大量的測試那更加讓費時間
這時我們就會拉出獨立測試環境
讓他自己執行相關程式
我們專注於自己的開發
最後只需等待測試結果就可以了
說到這裡
我們先簡單說明一下此章節目的
1 . 如何使用 AndroidStudio 進行測試單元
2 . 介紹 AndroidStudio 測試單元
3 . AndroidStudio 測試的項目
1 . 如何使用 AndroidStudio 進行測試單元
首先我們要先在 gradle 匯入基本套件
2 . 介紹 AndroidStudio 測試單元
AndroidStudio 測試單元有分別:
1 ) 一般 Java 測試:也就是 Junit,基本上和 Android UI 操作無關。
2 ) Android 流程操作:顧名思義,直接操控 App 執行對應的操作。
1 ) 一般 Java 測試
首先先在 src 底下添加我們要測試的 Class
紅色區塊:執行步驟。
橘色區塊:執行結果。綠色正常,紅色有問題。
黃色區塊:執行內容。
最主要是用註記來判斷要執行的動作,常用註記如下:
@BeforeClass:方法首先被執行,只執行一次。
@AfterClass:方法最後被執行,只執行一次。
@Before:每執行 Test 前執行一次。
@After:每執行 Test 後執行一次。
@Test:測試的功能內容。
@BeforeClass/@AfterClass 都要皆為 static。
測試程式碼
package com.example.brian.helloandroid;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ExampleUnitTest {
@BeforeClass
public static void testBeforeClass() throws Exception {
System.out.println("testBeforeClass");
}
@Before
public void testBefore() throws Exception {
System.out.println("testBefore");
}
@Test
public void testCase() {
System.out.println("--------");
System.out.println("testCase");
System.out.println("--------");
}
@After
public void testAfter() throws Exception {
System.out.println("testAfter");
}
@AfterClass
public static void testAfterClass() throws Exception {
System.out.println("testAfterClass");
}
}
結果如下:
testBeforeClass
testBefore
--------
testCase
--------
testAfter
testAfterClass
Process finished with exit code 0
參考資料:Android Studio单元测试入门
參考資料:Android 单元测试: 首先,从是什么开始
參考資料:Activity 测试系列教程
2017年2月17日 星期五
JQuery-基本 用法
要用 JQuery 前我們要先簡單了解這是什麼東西?
他是以 JavaScript 為基礎的 Library。
那在開發上和 JavaScript 有什麼差異?
最主要是改善在使用 JavaScript 的一些不便利。而且也能讓開發
者更有效率的去開發,且內部也有大量的 UI 元件可以使用。
首先是前準備的工具:
首先是前準備的工具:
歡迎轉載,請註明出處。
JAVA-Struts2 入門初體驗 ( 三 )__註記型
此次 Struts2 配置用註解來完成
所以以此篇來說
就不用放置設定檔
首先在放置 pom.xml 放置用得到的 jar
並且設置完基本的 web.xml 設定
連結:設定前置動作
註記型的 struts.xml 不用添加
在講述之前
先快速說明一下要如何進入此情境
以便於日後快速回想
( 缺圖 )
概述
一般頁面
一般頁面但有多個導頁或計算
一般頁面但有多個方法
此次註解說明:
@Namespace : 空間配置
@ResultPath : 默認情況下,它會找到結果頁在 WEB-INF/content/ 文件夾
@Result : 結果參照
@Action : 對應動作
results : 多種結果集合
location : 資源位置
一般頁面
返回的結果對應到上方 Result 所宣告的頁面
一般頁面但有多個導頁或計算
我們就會用此結果導致對應頁面。
一般頁面但有多個方法
參考資料:Struts 2
歡迎轉載,請註明出處。
所以以此篇來說
就不用放置設定檔
首先在放置 pom.xml 放置用得到的 jar
並且設置完基本的 web.xml 設定
連結:設定前置動作
註記型的 struts.xml 不用添加
在講述之前
先快速說明一下要如何進入此情境
以便於日後快速回想
( 缺圖 )
概述
一般頁面
一般頁面但有多個導頁或計算
一般頁面但有多個方法
此次註解說明:
@Namespace : 空間配置
@ResultPath : 默認情況下,它會找到結果頁在 WEB-INF/content/ 文件夾
@Result : 結果參照
@Action : 對應動作
results : 多種結果集合
location : 資源位置
一般頁面
http://localhost:8080/ProjectName/User/hello.action
說明:/User/hello.action 執行 hello 底下的 execute 方法返回的結果對應到上方 Result 所宣告的頁面
package com.brian.example.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
@Namespace("/User")
@ResultPath(value="/")
@Result(name="success",location="/WEB-INF/jsp/hello.jsp")
public class HelloAction {
@Action(value="hello")
public String execute(){
return "success";
}
}
一般頁面但有多個導頁或計算
http://localhost:8080/HelloStruts2Ann/User/userData.action
說明:執行對應的 userData 方法,但可能內部有邏輯判斷影響輸出的頁面我們就會用此結果導致對應頁面。
package com.brian.example.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
@Namespace("/User")
@ResultPath(value = "/")
public class UserDataAction {
@Action(value="userData", results={
@Result(name="success",location="/WEB-INF/jsp/userData.jsp"),
@Result(name="fail",location="/WEB-INF/jsp/fail.jsp")
})
public String userData(){
String aaa = "123";
if("aaa".equals(aaa)){
// doSomething
return "fail";
}
return "success";
}
}
一般頁面但有多個方法
http://localhost:8080/HelloStruts2Ann/User/userData1.action
orhttp://localhost:8080/HelloStruts2Ann/User/userData2.action
說明:藉由不同對應的 uri 對應到對應的方法。package com.brian.example.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
@Namespace("/User")
@ResultPath(value = "/")
public class UserDataAction {
@Action(value="userData1", results={
@Result(name="success",location="/WEB-INF/jsp/userData.jsp")
})
public String userData1(){
return "success";
}
@Action(value="userData2", results={
@Result(name="success",location="/WEB-INF/jsp/hello.jsp"),
@Result(name="fail",location="/WEB-INF/jsp/fail.jsp")
})
public String userData2(){
// return "fail";
return "success";
}
}
參考資料:Struts 2
歡迎轉載,請註明出處。
2017年2月16日 星期四
JAVA-Struts2 攔截器 Interceptor ( 二 )__實作
上一篇 : JAVA-Struts2 攔截器 Interceptor ( 一 )__說明
此篇是實作上篇所說明的程式碼
以下是自定義攔截器
歡迎轉載,請註明出處。
此篇是實作上篇所說明的程式碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<package name="user" namespace="/User" extends="struts-default">
<!-- 攔截器 -->
<interceptors>
<!-- (單一)宣告自定義攔截器 -->
<interceptor name="MyInterceptor" class="com.brian.example.interceptor.MyInterceptor"></interceptor>
<!-- (組合)定義其他攔截器,可引用其他攔截器 -->
<interceptor-stack name="defaultInterceptorStack">
<interceptor-ref name="MyInterceptor"></interceptor-ref>
<interceptor-ref name="i18n"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<!-- (組合)定義其他攔截器,可引用其他攔截器 -->
<interceptor-stack name="defaultInterceptorStack111">
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 以下功能是針對 "全部" action ,所以只要經過 struts.xml 就一定會先經過他-->
<!-- 如果有部分頁面或功能不需要到,就不要使用此功能 -->
<default-interceptor-ref name="MyInterceptor"></default-interceptor-ref>
<!-- 全部對應 result 頁面 -->
<global-results>
<result name="block">/WEB-INF/jsp/block.jsp</result>
</global-results>
<action name="hello" class="com.brian.example.action.HelloAction"
method="execute">
<result name="success">/WEB-INF/jsp/hello.jsp</result>
</action>
<action name="data" class="com.brian.example.action.DataAction"
method="execute">
<interceptor-ref name="MyInterceptor"/>
<result name="success">/WEB-INF/jsp/data.jsp</result>
</action>
</package>
</struts>
以下是自定義攔截器
package com.brian.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
System.out.println("-----攔截器銷毀-----");
}
@Override
public void init() {
System.out.println("-----攔截器生成-----");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("---------攔截器---------");
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
// 判斷某事件,例如:Token. Record 記錄是否存在
if (session.getAttribute("token")!= null) {
// 建議
System.out.println("Hello" + session.getAttribute("token"));
// 如果存在,直接略過此攔截
return invocation.invoke();
} else {
// 如果不存在,則導至某頁面
return "block";
}
}
}
歡迎轉載,請註明出處。
JAVA-Struts2 攔截器 Interceptor ( 一 )__說明
想必大家之前也聽過 Filter
結果現在又跑出一個 Interceptor ( 攔截器 )
此功能可用於資料的判斷,比如:
1 . 此使用者是否已經登入
2 . 此使用者是否靜置不動一段時間
...等
這些都是很實用的功能
要講述此功能前要先講一個情境
以便於日後更快了解要如何實際應用
現在有兩個頁面
A : 歡迎頁面
B : 會員資料頁面( 需通過攔阻器的驗證才可進入 )
想必大家都知道攔阻器的功能吧
我們來把 A 和 B 串成一個流程
這就是大家最熟悉的登入會員流程了
以下開始講程式面的說明
通常都是把攔阻器寫在 struts.xml 檔案內
攔阻器的設置如下
這部分只是類似宣告
還未開始被使用
以上攔截器設置完後
要如何使用??
1 ) 全域使用:所有的 Action 都先被攔截
皆可替換您在上方設置的任一個攔截器
2 ) 部分使用:針對部分設置的 Action 才被先攔截
皆可替換您在上方設置的任一個攔截器
最後,如果要做自己專屬的攔阻器
必須要實作 Interceptor
包括以下 :
1 . init:生成時。
2 . destroy:銷毀時。
3 . intercept:監聽,如果有攔截到特定資料,要如何處理。
參考資料:菜鸟学SSH(四)——Struts2拦截器
參考資料:从struts2拦截器到自定义拦截器
參考資料:struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
參考資料:Struts拦截器及Struts.xml文件详解
歡迎轉載,請註明出處。
結果現在又跑出一個 Interceptor ( 攔截器 )
此功能可用於資料的判斷,比如:
1 . 此使用者是否已經登入
2 . 此使用者是否靜置不動一段時間
...等
這些都是很實用的功能
要講述此功能前要先講一個情境
以便於日後更快了解要如何實際應用
現在有兩個頁面
A : 歡迎頁面
B : 會員資料頁面( 需通過攔阻器的驗證才可進入 )
想必大家都知道攔阻器的功能吧
我們來把 A 和 B 串成一個流程
這就是大家最熟悉的登入會員流程了
以下開始講程式面的說明
通常都是把攔阻器寫在 struts.xml 檔案內
攔阻器的設置如下
這部分只是類似宣告
還未開始被使用
<!-- 攔截器 -->
<interceptors>
<!-- (單一)宣告自定義攔截器 -->
<interceptor name="MyInterceptor" class="com.brian.example.interceptor.MyInterceptor"></interceptor>
<!-- (組合)定義其他攔截器,可引用其他攔截器 -->
<interceptor-stack name="defaultInterceptorStack">
<interceptor-ref name="MyInterceptor"></interceptor-ref>
<interceptor-ref name="i18n"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<!-- (組合)定義其他攔截器,可引用其他攔截器 -->
<interceptor-stack name="defaultInterceptorStack111">
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
以上攔截器設置完後
要如何使用??
1 ) 全域使用:所有的 Action 都先被攔截
皆可替換您在上方設置的任一個攔截器
<interceptors>
.
.
.
</interceptors>
<!-- 以下功能是針對 "全部" action ,所以只要經過 struts.xml 就一定會先經過他-->
<!-- 如果有部分頁面或功能不需要到,就不要使用此功能 -->
<default-interceptor-ref name="MyInterceptor"></default-interceptor-ref>
2 ) 部分使用:針對部分設置的 Action 才被先攔截
皆可替換您在上方設置的任一個攔截器
<interceptors>
.
.
.
</interceptors>
<!-- 只針對此 Action 先前攔截 -->
<action name="data" class="com.brian.example.action.DataAction"
method="execute">
<interceptor-ref name="MyInterceptor"/>
<result name="success">/WEB-INF/jsp/data.jsp</result>
</action>
最後,如果要做自己專屬的攔阻器
必須要實作 Interceptor
包括以下 :
1 . init:生成時。
2 . destroy:銷毀時。
3 . intercept:監聽,如果有攔截到特定資料,要如何處理。
參考資料:菜鸟学SSH(四)——Struts2拦截器
參考資料:从struts2拦截器到自定义拦截器
參考資料:struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
參考資料:Struts拦截器及Struts.xml文件详解
歡迎轉載,請註明出處。
2017年2月13日 星期一
JAVA-Struts2 入門初體驗 ( 二 )__配置型
前一篇我們有簡單提到專案大概架構
連結:設定前置動作
在講述之前
先快速說明一下要如何進入此情境
以便於日後快速回想
( 缺圖 )
概述
一般頁面
一般頁面但有多個導頁或計算
一般頁面但有多個方法
接下來我們添加:struts.xml 設定檔
此篇只換講到 action 和 result 一些基本的配置
一般
說明:沒有特定的動作,單純顯示對應的頁面
一般執行
說明:單一流程結果,執行的方法會對應到指定的 class 下的 method
一般執行但有多個結果
說明:method 執行後出現多種不同的結果
歡迎轉載,請註明出處。
此篇我們要來實作用:設定檔案方法來完成
連結:設定前置動作
在講述之前
先快速說明一下要如何進入此情境
以便於日後快速回想
( 缺圖 )
概述
一般頁面
一般頁面但有多個導頁或計算
一般頁面但有多個方法
接下來我們添加:struts.xml 設定檔
此篇只換講到 action 和 result 一些基本的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<package name="user" namespace="/User" extends="struts-default">
<!-- 一般 -->
<action name="hello">
<result>/WEB-INF/jsp/hello.jsp</result>
</action>
<!-- 一般執行 -->
<action name="Login" class="com.brian.example.action.HelloAction"
method="execute">
<result>/WEB-INF/jsp/hello.jsp</result>
</action>
<!-- 一般執行但有多結果 -->
<action name="Search" class="com.brian.example.action.UserDataAction"
method="execute">
<result name="success">/WEB-INF/jsp/success.jsp</result>
<result name="fail">/WEB-INF/jsp/fail.jsp</result>
</action>
</package>
</struts>
一般
說明:沒有特定的動作,單純顯示對應的頁面
http://localhost:8080/ProjectName/User/hello.action
一般執行
說明:單一流程結果,執行的方法會對應到指定的 class 下的 method
http://localhost:8080/HelloStruts2Ann/User/Login.action
package com.brian.example.action;
public class HelloAction {
public String execute(){
return "success";
}
}
一般執行但有多個結果
說明:method 執行後出現多種不同的結果
http://localhost:8080/HelloStruts2Ann/User/Search.action
package com.brian.example.action;
public class UserDataAction {
public String userData(){
// doSomething
// return "fail";
return "success";
}
}
歡迎轉載,請註明出處。
2017年2月10日 星期五
JAVA-Spring MVC 入門初體驗 ( 四 )_實作
20190609 整理多餘的程式碼
前面我們有提到基本簡介
前面我們有提到基本簡介
此篇就在介紹實作的部分,此篇尚未講到 Bean 部分
我們實作有以下步驟:
1 . 匯入有需要的 Jar
2 . 設定 web.xml
3 . 設定 projectName-servlet.xml
4 . 攥寫 Controller
5 . 攥寫 Jsp
我們實作有以下步驟:
1 . 匯入有需要的 Jar
2 . 設定 web.xml
3 . 設定 projectName-servlet.xml
4 . 攥寫 Controller
5 . 攥寫 Jsp
將這次此專案需要的 Jar 添加至 pom.xml 內
說明 : pom 的功能比較常用於匯入網路上的 Jar
為何不直接下載?是否能確定你我他都是載同一個版本??
說明 : pom 的功能比較常用於匯入網路上的 Jar
為何不直接下載?是否能確定你我他都是載同一個版本??
<dependencies>
<!-- Spring core & mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
</dependencies>
設定 web.xml
說明:
專案的進入點,所以要在這邊設定或過濾 Url 所要做的動作
HelloWeb-servlet.xml (這是預設格式,如需指定檔案名稱,需要另外寫設定)
設定掃描註記之對象及頁面管理規範
將 Spring MVC 的設定檔注入設定
Jsp 頁面
其實這有點像我們之前用過的 Srvlet 只是把它用註記方法取代
說明:
@Controller 必須標注在開頭
並且將對應的 Uri 放置在對應方法的上方
我們執行剛剛所創建出來的專案 : http://localhost:8080/FirstSpring/hello
注意 : 請務必依照對應的位置擺放
歡迎轉載,請註明出處。
說明:
專案的進入點,所以要在這邊設定或過濾 Url 所要做的動作
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
HelloWeb-servlet.xml (這是預設格式,如需指定檔案名稱,需要另外寫設定)
設定掃描註記之對象及頁面管理規範
將 Spring MVC 的設定檔注入設定
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.brian.prduct.controller" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
Jsp 頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${key}
</body>
</html>
其實這有點像我們之前用過的 Srvlet 只是把它用註記方法取代
說明:
@Controller 必須標注在開頭
並且將對應的 Uri 放置在對應方法的上方
package com.brian.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET )
public String search(ModelMap modelMap) {
modelMap.put("key", "hello");
// 返回與要顯示的頁面名稱
return "hello";
}
}
我們執行剛剛所創建出來的專案 : http://localhost:8080/FirstSpring/hello
注意 : 請務必依照對應的位置擺放
歡迎轉載,請註明出處。
2017年2月8日 星期三
訂閱:
文章 (Atom)