风人园

弱水三千,只取一瓢,便能解渴;佛法无边,奉行一法,便能得益。
随笔 - 99, 文章 - 181, 评论 - 56, 引用 - 0
数据加载中……

2016年11月8日

Spring boot+Spring Security 4配置整合实例

http://blog.csdn.net/code__code/article/details/53885510

1. 使用Spring Security管理用户身份认证、登录退出

2. 用户密码加密及验证

3. 采用数据库的方式实现Spring Securityremember-me功能

4. 获取登录用户信息。

5.使用Spring Security管理url和权限

posted @ 2018-03-19 21:02 风人园 阅读(292) | 评论 (0)编辑 收藏

spring security 参数配置

     摘要:         // 自定义登录页面          http.csrf().disable().formLogin().loginPage("/login")  //指定登录页的路径&n...  阅读全文

posted @ 2018-03-19 20:33 风人园 阅读(412) | 评论 (0)编辑 收藏

spring quartz 串行配置

<bean id="jobDetail7"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

                   <propertyname="targetObject" ref="billingBillTask"></property>

                   <propertyname="targetMethod" value="executeInternal" />

                   <propertyname="concurrent" value="false" />

         </bean>

         <beanid="billingBillTask"class="com.dangdang.tms.job.schedule.bms.BillingBillTask"/>

         <beanid="cronTriggerBean7" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

                   <propertyname="jobDetail" ref="jobDetail7"></property>

                   <propertyname="cronExpression" value="0/5 * * * * ?"></property>

         </bean>

参考 http://blog.csdn.net/lkforce/article/details/51841890

posted @ 2018-03-12 19:58 风人园 阅读(361) | 评论 (0)编辑 收藏

spring 3.0 async 异步方法 设置

为了解决一些比较费时且不是很紧要的任务,将此任务转为异步任务处理,提高前端操作体验。 spring 中 自带注解 @Async. 配置如下 applicationContext.xml 中 增加 task的引用 如上配置之后,只需要在 需要进行异步调用的方法前面增加 注解就可以了。 @Async public void updateOrderBillItemPQty(String deptId, String orderNo, Integer orderItemSid, Double pQty) { 注:需要注意,同一个对象里面方法调用,不会作为异步方法执行。

posted @ 2017-05-24 14:27 风人园 阅读(239) | 评论 (0)编辑 收藏

android ResourceNotFoundException


在对 TextView 或者 EditText 进行赋值时,调用setText()方法,一定要注意,使用String类型,不要使用int 或者long,否则 会出现找不到资源的异常。系统自动会将int作为一个资源ID,然后去R 里面找,结果找不到。

posted @ 2016-12-21 20:48 风人园 阅读(115) | 评论 (0)编辑 收藏

android 系统提示对话框(AlertDialog)的使用(zt)

     摘要: http://blog.csdn.net/meng425841867/article/details/8523730 在按键单击事件中添加创建对话框并设置相关属性。        [java] view plain copy dialogButton=(Button)findViewBy...  阅读全文

posted @ 2016-12-02 12:54 风人园 阅读(456) | 评论 (0)编辑 收藏

Android 自定义ListView adapter(zt)

     摘要: http://daoshud1.iteye.com/blog/1874241 本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView。 系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现 自定义适...  阅读全文

posted @ 2016-12-01 13:13 风人园 阅读(147) | 评论 (0)编辑 收藏

Android之SimpleAdapter简单实例和SimpleAdapter参数说明(zt)

     摘要: http://blog.csdn.net/x605940745/article/details/11981049 SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界面布局的id  表示该文件作为列表项的组件&...  阅读全文

posted @ 2016-12-01 13:12 风人园 阅读(163) | 评论 (0)编辑 收藏

android开发教程之listview使用方法

首先是布局文件,这里需要两个布局文件,一个是放置列表控件的Activity对应的布局文件 main.xml,另一个是ListView中每一行信息显示所对应的布局 list_item.xml 这一步需要注意的问题是ListView 控件的id要使用Android系统内置的 android:id="@android:id/list"

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width
="match_parent"
    android:layout_height
="match_parent"
    android:orientation
="vertical" >
        
<ListView 
        
android:id="@android:id/list"
        android:layout_width
="match_parent"
        android:layout_height
="match_parent"
        android:padding
="20dip"/>
</LinearLayout>

list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width
="match_parent"
android:layout_height
="match_parent"
android:orientation
="horizontal" >

<TextView
android:id="@+id/user_name"
android:layout_width
="match_parent"
android:layout_height
="match_parent"
android:layout_weight
="1"/>
<TextView
android:id="@+id/user_id"
android:layout_width
="match_parent"
android:layout_height
="match_parent"
android:layout_weight
="1"/>
</LinearLayout>


然后就设置MainActivity中的代码了:基本思想就是先将数据添加到ArrayList中,然后在设置SimpleAdapter适配器完成设置,入下:

package com.example.android_newlistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.widget.SimpleAdapter;

public class MainActivity extends ListActivity {


String[] from
={"name","id"}; //这里是ListView显示内容每一列的列名
int[] to={R.id.user_name,R.id.user_id}; //这里是ListView显示每一列对应的list_item中控件的id

String[] userName
={"zhangsan","lisi","wangwu","zhaoliu"}; //这里第一列所要显示的人名
String[] userId={"1001","1002","1003","1004"}; //这里是人名对应的ID

ArrayList
<HashMap<String,String>> list=null;
HashMap
<String,String> map=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//为MainActivity设置主布局
//创建ArrayList对象;
list=new ArrayList<HashMap<String,String>>();
//将数据存放进ArrayList对象中,数据安排的结构是,ListView的一行数据对应一个HashMap对象,
//HashMap对象,以列名作为键,以该列的值作为Value,将各列信息添加进map中,然后再把每一列对应
//的map对象添加到ArrayList中

for(int i=0; i<4; i++){
map
=new HashMap<String,String>(); //为避免产生空指针异常,有几列就创建几个map对象
map.put("id", userId[i]);
map.put(
"name", userName[i]);
list.add(map);
}


//创建一个SimpleAdapter对象
SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.list_item,from,to);
//调用ListActivity的setListAdapter方法,为ListView设置适配器
setListAdapter(adapter);
}

}


另外对点击某一行作出响应的方法是覆写onListItemClick方法,根据返回的position(从0开始):
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}


posted @ 2016-12-01 13:08 风人园 阅读(133) | 评论 (0)编辑 收藏

android json 数据解析



单数据{'singer':{'id':01,'name':'tom','gender':'男'}} 
多个数据{"singers":[ 
        {'id':02,'name':'tom','gender':'男'}, 
         {'id':03,'name':'jerry,'gender':'男'}, 
{'id':04,'name':'jim,'gender':'男'}, 
{'id':05,'name':'lily,'gender':'女'}]}          
// 普通Json数据解析 
    private void parseJson(String strResult) 
        
try 
            JSONObject jsonObj 
= new JSONObject(strResult).getJSONObject("singer"); 
            
int id = jsonObj.getInt("id"); 
            String name 
= jsonObj.getString("name"); 
            String gender 
= jsonObj.getString("gender"); 
            tvJson.setText(
"ID号"+id + ", 姓名:" + name + ",性别:" + gender); 
        }
 catch (JSONException e) 
            System.out.println(
"Json parse error"); 
            e.printStackTrace(); 
        }
 
    }
 
    
//解析多个数据的Json
   private void parseJsonMulti(String strResult) 
       
try 
            JSONArray jsonObjs 
= new JSONObject(strResult).getJSONArray("singers"); 
            String s 
= ""
            
for(int i = 0; i < jsonObjs.length() ; i++)
                JSONObject jsonObj 
= ((JSONObject)jsonObjs.opt(i)).getJSONObject("singer"); 
                
int id = jsonObj.getInt("id"); 
                String name 
= jsonObj.getString("name"); 
                String gender 
= jsonObj.getString("gender"); 
                s 
+=  "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ; 
            }
 
            tvJson.setText(s); 
        }
 catch (JSONException e) 
            System.out.println(
"Jsons parse error !"); 
            e.printStackTrace(); 
        }
 
    }
 

posted @ 2016-11-29 15:09 风人园 阅读(139) | 评论 (0)编辑 收藏

button onClick 事件的几种调用方式



  1. //第一种方式    
  2.         Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源    
  3.         Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听    
  4.             public void onClick(View v) {    
  5.                 String strTmp = "点击Button01";    
  6.                 Ev1.setText(strTmp);    
  7.             }    
  8.   
  9.         });   

  1.     //第二种方式(Android1.6版本及以后的版本中提供了,直接在layout中设置)    
  2.     public void Btn3OnClick(View view){    
  3.         String strTmp="点击Button03";  
  4.         Ev1.setText(strTmp);  
  5.   
  6.     }  

  1.  <Button  
  2.         android:id="@+id/button3"  
  3.         android:layout_width="wrap_content"  
  4.         android:layout_height="wrap_content"  
  5.         android:text="Button3"   
  6.         android:onClick="Btn3OnClick"/>  


第三种方式 activity 实现 单击监听接口

public class TestButtonActivity extends Activity implements OnClickListener {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}




 

posted @ 2016-11-29 13:31 风人园 阅读(878) | 评论 (0)编辑 收藏

打开activity的几种方式


一、直接打开,不传递参数
Intent intent = new Intent(this, Activity.class);
startActivity(intent);


二、传递参数
public void OpenNew(View v) {
    
//新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
    Intent intent =new Intent(MainActivity.this,MainActivity2.class);
    
    
//用Bundle携带数据
    Bundle bundle=new Bundle();
    
//传递name参数为tinyphp
    bundle.putString("name""tinyphp");
    intent.putExtras(bundle);
    
    startActivity(intent);       
 //1.要关闭的页面  
    protected void onCreate(Bundle savedInstanceState) {  
        
super.onCreate(savedInstanceState);  
        setContentView(R.layout.otheractivity);  
        Intent intent 
= this.getIntent();  
        intent.putExtra(
"tel"12345);  
        
//设置requestCode和带有数据的intent对象  
        OtherActivity.this.setResult(3, intent);  
        
//马上关闭Activity  
        this.finish();  
    }
  
      
    
//2.上面的页面关闭时,此页面进行数据的接收  
    class ButtonListener implements android.view.View.OnClickListener{  
        @Override  
        
public void onClick(View arg0) {  
            Intent intent 
= new Intent();  
            intent.setClass(MainActivity.
this, OtherActivity.class);  
            
//与普通的start方法不同,需要设置requestCode  
            startActivityForResult(intent, 1);  
        }
  
    }
  
      
    
//如果要进行此操作,需要在数据接收页面中复写activity的onActivityResul()方法  
    @Override  
    
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        
super.onActivityResult(requestCode, resultCode, data);  
        
int tel = 0;  
        
//根据返回码resultCode来判断下一步进行的业务代码  
        if(resultCode==3){  
            tel 
= data.getIntExtra("tel"0);  
        }
  
        Log.i(TAG, 
"tel--------->"+String.valueOf(tel));  
    }
  
 
    }



三、回传参数


posted @ 2016-11-29 13:24 风人园 阅读(419) | 评论 (0)编辑 收藏

spring mvc @ExceptionHandler 异常处理

spring mvc 统一的异常处理,有两种方式。
一、exceptionResolver
二、ExceptionHandler

两者不能同时配置。如果配置了第一种,则第二种无效。就因为这个原因,找了一天的问题。

ExceptionHandler 通过注解的方式,进行配置,只需要在某个controller 中设置了这个注解,则这个controller中的所有异常都会通过这个方法进行处理。

比如rest controller,增加一个
    @ExceptionHandler
    
public String exp(HttpServletRequest request, Exception ex) {  
        
        Map map 
= new HashMap();
        
        logger.error(
"error," + UUID.randomUUID().toString(), ex);
        request.setAttribute(
"ex", ex);  
        
        String msg 
= ex.getMessage();
        
        map.put(
"success""0"); 
        map.put(
"msg", msg);
        
        String rtnjson 
= JSONUtil.objectToJson(map);
        
        request.setAttribute(
"json", rtnjson);
        
        
return "json";
    }
 

这样,这个controler中的异常,都会由这个异常处理方法,进行统一处理,生成异常json。避免在各个方法中通过try catch 的方法,进行异常处理。

posted @ 2016-11-08 08:32 风人园 阅读(375) | 评论 (0)编辑 收藏