JBOSS 点滴

丰丰的博客

2014年12月3日 #

spring boot结合thymeleaf通过后台传入的数值循环生成标签

spring boot结合thymeleaf通过后台传入的数值循环生成标签

 <span th:each="i:${#numbers.sequence(1,page.pages)}">
   
<span th:text="${i}"/>
</span>

posted @ 2019-10-16 16:06 半导体 阅读(22) | 评论 (0)编辑 收藏

模态框传值

模态框传值:
https://blog.csdn.net/linhaiyun_ytdx/article/details/77417702

posted @ 2019-10-12 16:35 半导体 阅读(19) | 评论 (0)编辑 收藏

Bootstrap 模态框 + iframe > 打开子页面 > 数据传输/关闭模态框

     摘要: 父页面bootstrap模态框: <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false" > <div class="modal-dialog modal-lg"> ...  阅读全文

posted @ 2019-05-28 21:23 半导体 阅读(20) | 评论 (0)编辑 收藏

mybatis学习之路----mysql批量新增数据

来源:
https://blog.csdn.net/xu1916659422/article/details/77971867
 
   mysql新增语句 
    insert into 表名(字段,字段。。。) values ( 值,值 。。。);此种适合单条插入。
批量插入,
   一种可以在代码中循环着执行上面的语句,但是这种效率太差,下面会有对比,看看它有多差。
另一种,可以用mysql支持的批量插入语句,
insert into
     表名(字段,字段。。。) values ( 值,值 。。。),( 值,值 。。。),( 值,值 。。。)....
这种方式相比起来,更高效。
实现过程mapper.xml
 

    <!-- 跟普通的insert没有什么不同的地方 ,主要用来跟下面的批量插入做对比。-->
    <insert id="insert" parameterType="com.soft.mybatis.model.Customer">
        <!-- 跟自增主键方式相比,这里的不同之处只有两点
                    1  insert语句需要写id字段了,并且 values里面也不能省略
                    2 selectKey 的order属性需要写成BEFORE 因为这样才能将生成的uuid主键放入到model中,
                    这样后面的insert的values里面的id才不会获取为空
              跟自增主键相比就这点区别,当然了这里的获取主键id的方式为 select uuid()
              当然也可以另写别生成函数。-->
        <selectKey keyProperty="id" order="BEFORE" resultType="String">
            select uuid()
        </selectKey>
        insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age)
        values (#{id},#{name},#{sex},#{ceroNo},#{ceroType},#{age})
    </insert>
 
    <!-- 批量插入, -->
    <insert id="batchInsert" parameterType="java.util.Map">
        <!-- 这里只做演示用,真正项目中不会写的这么简单。 -->
        insert into
          t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age)
        values
        <!-- foreach mybatis循环集合用的
              collection="list" 接收的map集合中的key 用以循环key对应的属性
                 separator=","  表示每次循环完毕,在sql后面放一个逗号
                 item="cus" 每次循环的实体对象 名称随意-->
        <foreach collection="list" separator="," item="cus">
            <!-- 组装values对象,因为这张表的主键为非自增主键,所以这里 (select uuid()) 用于生成id的值-->
            ((select uuid()),#{cus.name},#{cus.sex},#{cus.ceroNo},#{cus.ceroType},#{cus.age})
        </foreach>
    </insert>
实体model对象

package com.soft.mybatis.model;

 

/**

 * Created by xuweiwei on 2017/9/10.

 */

public class Customer {

 

    private String id;

    private String name;

    private Integer age;

    private Integer sex;

    private String ceroNo;

    private Integer ceroType;

 

    public String getId() {

        return id;

    }

 

    public void setId(String id) {

        this.id = id;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public Integer getAge() {

        return age;

    }

 

    public void setAge(Integer age) {

        this.age = age;

    }

 

    public Integer getSex() {

        return sex;

    }

 

    public void setSex(Integer sex) {

        this.sex = sex;

    }

 

    public String getCeroNo() {

        return ceroNo;

    }

 

    public void setCeroNo(String ceroNo) {

        this.ceroNo = ceroNo;

    }

 

    public Integer getCeroType() {

        return ceroType;

    }

 

    public void setCeroType(Integer ceroType) {

        this.ceroType = ceroType;

    }

 

    @Override

    public String toString() {

        return "Customer{" +

                "id='" + id + '\'' +

                ", name='" + name + '\'' +

                ", age=" + age +

                ", sex=" + sex +

                ", ceroNo='" + ceroNo + '\'' +

                ", ceroType='" + ceroType + '\'' +

                '}';

    }

}
接口
  1. int add(Customer customer);
  2.     int batchInsert(Map<String,Object> param);

    实现
实现

   
/**

     * 新增数据

     * 
@param customer

     * 
@return

     
*/

    
public int add(Customer customer) {

        
return insert("customer.insert", customer);

    }

 

    
/**

     * 批量插入数据

     * 
@param param

     * 
@return

     
*/

    
public int batchInsert(Map<String,Object> param) {

        
return insert("customer.batchInsert", param);

    }

 

    
/**

     * 公共部分

     * 
@param statementId

     * 
@param obj

     * 
@return

     
*/

    
private int insert(String statementId, Object obj){

        SqlSession sqlSession 
= null;

        
try {

            sqlSession 
= SqlsessionUtil.getSqlSession();

            
int key =  sqlSession.insert(statementId, obj);

            
// commit

            sqlSession.commit();

            
return key;

        } 
catch (Exception e) {

            sqlSession.rollback();

            e.printStackTrace();

        } 
finally {

            SqlsessionUtil.closeSession(sqlSession);

        }

        
return 0;

    }

posted @ 2019-05-23 11:29 半导体 阅读(36) | 评论 (0)编辑 收藏

springboot中树形结构的开发

POM中引入
        <!--JSON树形结构 转换-->
        
<dependency>
            
<groupId>net.sf.json-lib</groupId>
            
<artifactId>json-lib</artifactId>
            
<version>2.4</version>
            
<classifier>jdk15</classifier>
        
</dependency>
实体类创建
import net.sf.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

/**
 * 构造目录JSON树
 * Created by   network on 2019/5/22
 
*/
public class TreeBuilder {

    List
<Node> nodes = new ArrayList<>();

    
public String buildTree(List<Node> nodes) {

        TreeBuilder treeBuilder 
= new TreeBuilder(nodes);

        
return treeBuilder.buildJSONTree();
    }

    
public TreeBuilder() {
    }

    
public TreeBuilder(List<Node> nodes) {
        
super();
        
this.nodes = nodes;
    }

    
// 构建JSON树形结构
    public String buildJSONTree() {
        List
<Node> nodeTree = buildTree();
        JSONArray jsonArray 
= JSONArray.fromObject(nodeTree);
        
return jsonArray.toString();
    }

    
// 构建树形结构
    public List<Node> buildTree() {
        List
<Node> treeNodes = new ArrayList<>();
        List
<Node> rootNodes = getRootNodes();
        
for (Node rootNode : rootNodes) {
            buildChildNodes(rootNode);
            treeNodes.add(rootNode);
        }
        
return treeNodes;
    }

    
// 递归子节点
    public void buildChildNodes(Node node) {
        List
<Node> children = getChildNodes(node);
        
if (!children.isEmpty()) {
            
for (Node child : children) {
                buildChildNodes(child);
            }
            node.setChildren(children);
        }
    }

    
// 获取父节点下所有的子节点
    public List<Node> getChildNodes(Node pnode) {
        List
<Node> childNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (pnode.getId().equals(n.getPid())) {
                childNodes.add(n);
            }
        }
        
return childNodes;
    }

    
// 判断是否为根节点
    public boolean rootNode(Node node) {
        
boolean isRootNode = true;
        
for (Node n : nodes) {
            
if (node.getPid().equals(n.getId())) {
                isRootNode 
= false;
                
break;
            }
        }
        
return isRootNode;
    }

    
// 获取集合中所有的根节点
    public List<Node> getRootNodes() {
        List
<Node> rootNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (rootNode(n)) {
                rootNodes.add(n);
            }
        }
        
return rootNodes;
    }

    
public static class Node {

        
private String id;
        
private String pid;
        
private String name;
        
private List<Node> children;

        
public Node() {
        }

        
public Node(String id, String pid, String name) {
            
super();
            
this.id = id;
            
this.pid = pid;
            
this.name = name;
        }

        
public String getId() {
            
return id;
        }

        
public void setId(String id) {
            
this.id = id;
        }

        
public String getPid() {
            
return pid;
        }

        
public void setPid(String pid) {
            
this.pid = pid;
        }

        
public String getName() {
            
return name;
        }

        
public void setName(String name) {
            
this.name = name;
        }


        
public List<Node> getChildren() {
            
return children;
        }

        
public void setChildren(List<Node> children) {
            
this.children = children;
        }
    }
}
mapper.xml
    <!--根据条件查询返回Node-->
    
<select id="findByItemtypeTree" parameterType="BsItemtype" resultType="Node">
        SELECT upcode as pid,itemname as name,itemtypecode as id FROM 表名 WHERE 1=1
        
<if test="upcode != null  and upcode != '' ">
            and upcode = #{值}
        
</if>
    
</select>
controller:返回结果
    //树形结构
    @RequestMapping("left")
    ModelAndView left() 
throws JSONException {
        String mavStr 
= "";
        BsItemtype queryItemtype 
= new BsItemtype();
        
//查询根目录树
      
//  queryItemtype.setUpcode("00");
        
// 获取全部目录节点
        List<TreeBuilder.Node> itemtypeTree = itemtypeService.findByItemtypeTree();

        
// 拼装树形json字符串
         mavStr = new TreeBuilder().buildTree(itemtypeTree);
        mavStr 
= mavStr.replaceAll("\"children\"","\"nodes\"");
        mavStr
= mavStr.replaceAll("\"id\"","\"value\"");
        mavStr 
= mavStr.replaceAll("\"name\"","\"text\"");
        ModelAndView mav 
= new ModelAndView("/bs/itemtype/itemtypeLeft.html");//配置返回路径
        System.out.println(mavStr);
        mav.addObject(
"mavStr", mavStr.toString());
        
return mav;
    }
DAO层:
List<TreeBuilder.Node> findByItemtypeTree();

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    
<meta charset="UTF-8">
    
<title></title>

    
<!-- Required Stylesheets -->
    
<link href="/oastyle/css/bootstrap.css" rel="stylesheet">
    
<!-- Required Javascript -->
    
<script src="/js/jquery.js"></script>
    
<script src="/js//bootstrap-treeview.js"></script>
</head>
<body>
<div id="tree"></div>
<script th:inline="javascript">
var tree = eval([[${mavStr}]]);
         
function getTree() {
        
// Some logic to retrieve, or generate tree structure
        return tree;
    }

    $('#tree').treeview({
        data: getTree(),
        enableLinks: 
true});

    $('#tree').on('nodeSelected',
function(event, data) {
          window.parent.itemtypeRight.location.href
="/itemtype/list?upcode="+data.value;
    });

</script>

</body>
</html>

posted @ 2019-05-21 19:08 半导体 阅读(32) | 评论 (0)编辑 收藏

技巧

layui
可以做表格排序。

posted @ 2019-05-16 21:14 半导体 阅读(10) | 评论 (0)编辑 收藏

分页方式:

前台:
<form   method="post" action = "/bbs/list"  id="queryform">
        
<input type="hidden" name="start" id="start"/>
        
<li>搜索:</li>
                
<input type="text" placeholder="请输入公告名称" name="title"  th:value ="${queryBbs.title}" />
              
<href="javascript:void(0)" class="button border-main icon-search" onclick="changesearch()" > 搜索</a>
    
</form>
    //搜索
    function changesearch() {
        $(
"#queryform").submit();
    }
通过page传值
<div class="pagelist" th:include="common/footer::page"/>
包含页面
<!--fotter-->
<div class="pagelist" th:fragment="page">
    
<a th:onclick="javascript:page(0)">[首 页]</a>
    
<a th:onclick="javascript:page([[${page.pageNum}]]-1)">[上一页]</a>
    
<a th:onclick="javascript:page([[${page.pageNum}]]+1)">[下一页]</a>
    
<a th:onclick="javascript:page([[${page.pages}]])">[尾 页]</a>
    共[[${page.total}]]条记录
</div>
//分页跳转方法
function page(pageNum) {
$(
"#start").val(pageNum);
$(
"#queryform").submit();
}
此种方法可以将搜索查询框内容通过form表单的方式提交给controller,controller再分页,但点“下一页”事件多点二次很容易导致浏览器假死。

第二种方式:直接通过href传值,这种方式不死机。
                        <div class="pagelist">
                        
<th:href="@{/bbs/list(start=0,title=${queryBbs.title})}">[首  页]</a>
                        
<th:href="@{/bbs/list(start=${page.pageNum-1},title=${queryBbs.title})}">[上一页]</a>
                        
<th:href="@{/bbs/list(start=${page.pageNum+1},title=${queryBbs.title})}">[下一页]</a>
                        
<th:href="@{/bbs/list(start=${page.pages},title=${queryBbs.title})}">[尾  页]</a>
                            共[[${page.total}]]条记录
                        
</div>

posted @ 2019-05-15 15:21 半导体 阅读(9) | 评论 (0)编辑 收藏

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing

     摘要: 错误如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->org.thymeleaf.exceptions.TemplateInputException: An error happened during&nbs...  阅读全文

posted @ 2019-05-12 15:15 半导体 阅读(2285) | 评论 (0)编辑 收藏

好看的界面

windows风格
https://www.toufu.xyz
layui

posted @ 2019-05-11 23:17 半导体 阅读(10) | 评论 (0)编辑 收藏

Spring+Mybatis 查询所有数据时发生异常:org.apache.ibatis.reflection.ReflectionException: There is no getter for

Spring+Mybatis框架整合时,根据条件查询数据,发生异常
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'sname' in 'class java.lang.String'
userinfoMapper.xml文件:
<select id="findAll" parameterType="string" resultMap="userinfoMap">  select * from userinfo where sname like '%${sname}%' </select>
UserinfoMapper接口:

public List<Userinfo> findAll(String sname);
解决方法:在参数前加@Param标签
public List<Userinfo> findAll(@Param("sname") String sname);

posted @ 2019-05-11 16:05 半导体 阅读(26) | 评论 (0)编辑 收藏

全选输出checkbox的值

$("input[name='a']").each(function () {
            Aval 
= $(this).val();
            alert(Aval);
        });

解释:取当前页面所有name='a'的input元素,循环每一个取到的元素,将其value的值赋

给Aval,并输出。


posted @ 2019-05-11 14:48 半导体 阅读(8) | 评论 (0)编辑 收藏

mysql8.0使用sqlyog无法连接时

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

posted @ 2019-05-06 10:14 半导体 阅读(70) | 评论 (0)编辑 收藏

jquery常用语法

$(":text[name='username']").val()

$("#logOn").click(function () {
});
1、jquery引入基本语法:
 $(function(){});

2、触发所有button元素的click事件
    $(
":button").click( ); // 调用不带任何参数的click()函数,会触发每个匹配元素的click事件.
 3、// 点击链接时,阻止链接跳转
    $(
"a").click( function(){
       
return false;
    } );

posted @ 2019-05-04 21:57 半导体 阅读(7) | 评论 (0)编辑 收藏

springboot+ssm+mysql 错误记录

HikariPool-1 - Driver does not support get/set network timeout for connections. (com.mysql.jdbc.JDBC4Connection.getNetworkTimeout()I)
解决办法:在application.properties数据库连接中增加:&serverTimezone=UTC
Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
解决办法:打开mysql,输入set global time_zone='+8:00';
还有给我自己提个醒,报错信息千万别只看一句,如果第一句报错没给你答案,后面的报错信息继续看。

posted @ 2019-04-29 23:05 半导体 阅读(273) | 评论 (0)编辑 收藏

字符串型转换为JSON并获取值

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST)
@ResponseBody
public void updateInvestorApplyAccountNo(HttpServletRequest request,
HttpServletResponse response,
@RequestBody String requestBody) {
int num = 0;
String result = "";
//下面是把拿到的json字符串转成 json对象
JSONObject jsStr = JSONObject.parseObject(requestBody); //将字符串{“id”:1}
//int jsID = Integer.parseInt(jsStr.getString("id"));//获取id的值


/** 
* json对象转换成java对象 
*/ 
InvestorApplyModel stud = (InvestorApplyModel) JSONObject.toJavaObject(jsStr,InvestorApplyModel.class);

}

posted @ 2018-08-25 15:38 半导体 阅读(56) | 评论 (0)编辑 收藏

redirect_uri域名与后台配置不一样,错误码10003

微信获取openid时,如遇到以下错误

解决方法如下:
1、获取openid时,链接地址https://open.weixin.qq.com/connect/oauth2/authorize? 中redirect_uri一定要带上http,
   公众号设置->功能设置->网页授权域名中的域名与redirect_uri域名要一模一样,记得一定要加上http://

posted @ 2018-08-22 10:14 半导体 阅读(279) | 评论 (0)编辑 收藏

JAVA+ORACLE+BLOB+Mybatis

实体类:
    private  byte[] richContent;
    
public byte[] getRichContent() {
        
return richContent;
    }


    
public void setRichContent(byte[] richContent) {
        
this.richContent = richContent;
    }

Mapper.xml
    <result column="RICH_CONTENT" property="richContent" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>

      <if test="richContent != null" >
        UPDATE_DATE = #{richContent,jdbcType=BLOB},
      
</if>
JSP
<td class="propname">发布内容:</td>
<td class="propvalue" colspan="6">
<div id="myEditor" type="text/plain" name='content' style="width: 900px;height:400px;"/>
</td>
CONTROL保存
    //利用content转换为二进制,存入richcontent
String strRich = newsBean.getContent();
if(strRich.length()>0) {
byte[] temp = strRich.getBytes();
newsBean.setRichContent(temp);
newsBean.setContent("");
}

CONTROL显示:
if(casNewsModel.getRichContent().length>0) {
content = new String(casNewsModel.getRichContent());
casNewsModel.setContent(content);
}



posted @ 2018-01-22 20:34 半导体 阅读(62) | 评论 (0)编辑 收藏

模拟登录解决方案

最近一直在做单点登录,随着客户需求不同,解决方案也是多种多样,来说说我总结的解决方案:
一、采用标准接口方式实现单点登录,由于夜已深,以后再上传。
二、采用模拟登录,在门户中让用户输入用户名密码,再模拟用户登录的方式实现系统登录。
当客户提出这种方式时,本人是表示不理解,考虑到安全性本想拒绝,但。。。客户永远是god。
说说这种方式实现的思路吧,用户登录无非几种,
第一:输入用户名密码然后uget或post提交,有密码在手,get方式大家都会,post也很容易,登陆页另存为,form action填远程登陆地址,正常就O了。   
        千万注意,如果用户传的中文,一定要保证不乱码,传输的编码要与系统对应,在<post 中增加编码格式就行了,如:
<form action="远程提交地址"   accept-charset="GB2312" onsubmit="document.charset='GB2312';"/>
第二:如果碰到先加密,再私钥配对这种,模拟他的整个过程,因为密码在手,他调什么方法,你也调,他怎么混,你也照着混。只是步骤多,其他都一样,

posted @ 2017-12-24 00:13 半导体 阅读(40) | 评论 (0)编辑 收藏

ajax调用方法

i不跨域调用

$(document).ready(function() {
$.ajax({
type : 'post',
url :' <%=path%>/mplat/InitAllMenu',
data : {},
cache : false,
dataType : 'json',
success : function(data, stats) {alert(data.menus);
// var returnData=JSON.parse(data);
/* var returnData = data;
appname = returnData.appname;
allTreeNodes = JSON.parse(returnData.menus);*/
},
error : function() {debugger;
alert( "加载应用名出现问题..");
}
})
;

跨域请用jsonp访问,由于回调时会报callback错误,请直接用jquery-jsonp插件;

做跨域数据处理的时候经常使用Jquery的getJSONP方法。但是这个方法跟普通的Ajax是完全不一样的,尽管指定了error,当请求发生错误的时候也不会去执行这个函数。

jQuery-JSONP 是一个支持 JSONP 调用的 jQuery 插件,它支持出错时的 Ajax 回调。下载地址:https://github.com/jaubourg/jquery-jsonp

使用方法很简单,直接引用Down到的文件到你的页面。

$.jsonp({
        url: "/Handler/demo",
        data: { yourdata: "data" },
        callback:"callbackAction",
        success: function (json) {
            //your code            
        },
        error: function (xOptions, textStatus) {
            //your code           
        }
    });

  

注意事项:


http://blog.csdn.net/function_jx_/article/details/47124815
  1. callback:假如指定的值是callbackAction,服务端返回的json数据必须包含在callbackAction()里面。(具体原因请了解一下Jsonp实现原理)

posted @ 2017-12-13 16:50 半导体 阅读(92) | 评论 (0)编辑 收藏

java文件上传工具

uploadify:文件可以切片存放,目前常用

http://www.plupload.com/examples/ 

webUploader

swfUpload:界面漂亮,但文件不能切片存放

posted @ 2017-11-20 16:51 半导体 阅读(61) | 评论 (0)编辑 收藏

powerdesigner反向工程时报错odbc驱动问题

找了很久终于找到64位的powerdesigner16.5了,网上基本所有的默认为32位的,但是现在数据库基本都是64位的了,这样在逆向生成pdm时就会报错,请叫我雷锋。

链接:http://pan.baidu.com/s/1slwAjSh

提取密码:d4gw

需要破解文件的可以在我的上传资源里找到,绝对可以用,本人亲测的!

转自:http://blog.csdn.net/danfeixia123/article/details/53381733

posted @ 2017-11-07 15:17 半导体 阅读(123) | 评论 (0)编辑 收藏

IDE环境配置

oracle 下载地址:http://blog.itpub.net/16886618/viewspace-1365348/
MAVEN安装:http://www.cnblogs.com/izecsonLee/p/6155868.html   最后setting文件localRepository改为 本机地址。

posted @ 2017-10-17 23:43 半导体 阅读(118) | 评论 (0)编辑 收藏

微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问

  最近开始微信公众平台的捣鼓,但相信和很多新手一样,遇到的第一件事就是如何配置url,主要是微信的80端口的蛋疼限制,我想这其中的流程应该是这样 的。我们在申请测试帐号时,微信需要指定一个URL和TOKEN,这样微信就可以根据分配给你的APPID和SECRET来通过你提供的URL来认证并且 通过这个接口返回你要的数据,所以也就是我们的程序和微信是能过这个URL来完成交互的,根据这个思路,我们需要一个能让微信访问到你项目的URL,至于 TOKEN可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)

在公司,首先应当解决的是怎么让外网访问你的项目,我用的是JAVA语言来做开发,刚 开始想通过3322动态解析平台让外网映射到公司来,然后用路由来做一个映射到我的tomcat 8080端口,但尝试后发现3322这个是不能用80端口做映射(很多都这样),所以没办法,也不能直接上公司的服务器来开发,而且80会被其他端口占 用,如果把项目托管到云服务器上也不方便开发,幸好在一个群里遇到高手,建议用ngrok直接把本地开放给外网(大喜),下载后直接把这个解压(我用的是ubuntu,所以下的linux版),在终端里运行./ngrok 8080,这样ngrok会返回一个动态的URL,果然可以访问了,但问题是我在微信里填写的这个URL不可能每次都变呀,于是运行./ngrok -subdomain=test 8080,但这个需要注册才可以用,于是去官网注册。 再根据提示运行一次验证,然后运行这个就OK了,这样我的URL就固定为http://test.ngrok.com。于是乎,我填写微信的URL为 http://test.ngrok.com/mywork/app/action/service(项目访问路径), 打开这tomcat,这样不要做任何更改就可以让外网访问了,然后点击申请认证,就可以看到微信平台已经访问到这我的项目了,接下来做一些验证(下篇贴出 验证代码-java版),OK。这下可以看到配置成功了。至此结束,开始微信之旅,这里感谢群里的老K,和其他的一些兄弟。


来源:
http://blog.csdn.net/aj1031689/article/details/17436125

posted @ 2015-10-23 13:11 半导体 阅读(259) | 评论 (0)编辑 收藏

android软银盘始终显示,并显示在焦点上

//强制显示软银盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//edittext默认焦点
scanbill.setFocusable(true);
scanbill.requestFocus();
scanbill.setFocusableInTouchMode(true);

posted @ 2015-07-03 20:09 半导体 阅读(132) | 评论 (0)编辑 收藏

安卓安装

http://wenku.baidu.com/link?url=7c2-Fo9694hJtWxlwsab09f8fv81BPQmrWMQD8z1zxUSnvnM2FfECc4gN0yewgxkSUhLkdbrG4euc2CULcjQHY7fUn5xzjDedELXAcY-2sG&qq-pf-to=pcqq.c2c

posted @ 2015-06-03 12:17 半导体 阅读(108) | 评论 (0)编辑 收藏

[Android实例] 查找手机中所有的APK,并点击其中任一应用程序进入其中

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=203302

posted @ 2015-05-26 11:37 半导体 阅读(93) | 评论 (0)编辑 收藏

android跳转到另一个类再返回当前类和值

第一步:在A类中点击按钮时调用B类
A类中:
int OUTBILL_CODE = 10;//全局啊
  case R.id.diyoutbill:
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.setClass(ctx, Itemdiydown.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivityForResult(intent,OUTBILL_CODE);
   break;
第二步:
B类中:
      Bundle bundle = new Bundle();   
      bundle.putString("downtype",pubdowntype);
      bundle.putString("startDate",pubstartDate);
      bundle.putString("endDate", pubendDate);
   Itemdiydown.this.setResult(RESULT_OK, this.getIntent().putExtras(bundle));   
   Itemdiydown.this.finish();//关闭当前窗口 
第三类:
返回A类中:
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == OUTBILL_CODE&& resultCode == RESULT_OK) {//
    Bundle bundle = data.getExtras();
          startDate = bundle.getString("startDate");
          endDate = bundle.getString("endDate");
          downtype = bundle.getString("downtype");
          //执行事件
  }
 }

posted @ 2015-05-23 16:59 半导体 阅读(114) | 评论 (0)编辑 收藏

android连接数据库sqllist基础操作学习:

基础学习:
http://blog.csdn.net/liuhe688/article/details/6715983/

Android 数据存储——SQLite实例、判断数据库中表是否存在
http://www.2cto.com/kf/201502/375368.html

posted @ 2015-05-23 11:19 半导体 阅读(191) | 评论 (0)编辑 收藏

SharedPreferences存储和读取数据

     摘要: 转自:http://blog.sina.com.cn/s/blog_4f1c99de0101hur1.html除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPrefer...  阅读全文

posted @ 2015-05-21 13:14 半导体 阅读(110) | 评论 (0)编辑 收藏

JAVA获取配置信秘

java.util.Properties props = new java.util.Properties();
  in = getClass().getResourceAsStream("/HotelBeContextDAO.properties");
  try {
   props.load(in);
    props.getProperty("officeCode")
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

posted @ 2015-05-20 09:33 半导体 阅读(85) | 评论 (0)编辑 收藏

用webview写界面,加载本地js,js,html文件

转自:http://www.tuicool.com/articles/3mE7BzR
以jquery mobile为例

1.在android界面拖入一个webview,然后添加一个internet权限

<uses-sdk  
    android:minSdkVersion="8"  
    android:targetSdkVersion="18" />  
<uses-permission android:name="android.permission.INTERNET"/>  
  
<application  
            .............................  
View Code

2.  在assets目录里面放入js,css,html资源文件

3.在写本地html的时候引入assert里的对应路径

<!DOCTYPE html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="viewport" content="width=device-width, initial-scale=1">   
<title> 标题 </title>  
<link rel="stylesheet" type="text/css" href="file:///android_asset/css/jquery.mobile-1.4.2.min.css">  
<script src="file:///android_asset/js/jquery-1.7.1.min.js"></script>  
<script src="file:///android_asset/js/jquery.mobile-1.4.2.min.js"></script>  
</head>  
<body>  
  
  
 <div data-role="page">  
   <div data-role="header">  
    <h1>My Title</h1>  
   </div>  
     
   <div data-role="content">  
    <ul data-role="listview" data-inset="true" >  
      <li><a href="#">Acura</a></li>  
      <li><a href="#">Audi</a></li>  
      <li><a href="#">BMW</a></li>  
      <li><a href="#">Cadillac</a></li>  
      <li><a href="#">Ferrari</a></li>  
    </ul>   
   </div>  
 </div><!-- /page -->  
  
</body>  
</html>
View Code

4.在代码里访问页面

package com.example.asd_webview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    WebView webview = (WebView)findViewById(R.id.webView1);
    WebSettings wv_setttig = webview.getSettings();
    wv_setttig.setJavaScriptEnabled(true);
    //wv_setttig.setRenderPriority(RenderPriority.HIGH);
    
    String url = "file:///android_asset/index.html";
    webview.loadUrl(url);
    
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

}
View Code

5.最后效果如下:

posted @ 2015-05-15 17:03 半导体 阅读(343) | 评论 (0)编辑 收藏

CSS图片适应DIV或TD

img{
max-width:100%;height:auto;
}

posted @ 2015-05-15 12:19 半导体 阅读(113) | 评论 (0)编辑 收藏

android在布局中图片大小自适应

一、适应某控制:
      XML:

                <WebView
                    android:id="@+id/awaimage"
                    android:layout_width="90dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:scaleType="fitXY"

     JAVA:
/*            WebSettings webSettings = holder.imageView.getSettings();    
            webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕 
            webSettings.setLoadWithOverviewMode(true); 
*/

            
//允许使用javascript  
       
//     webSettings.setJavaScriptEnabled(true); 

二、自动适应屏幕大小:
         WebSettings webSettings = holder.imageView.getSettings();   
         webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕
         webSettings.setLoadWithOverviewMode(true); 
         //允许使用javascript  
         webSettings.setJavaScriptEnabled(true);

posted @ 2015-05-13 14:39 半导体 阅读(75) | 评论 (0)编辑 收藏

Android图片处理内存溢出学习

    

        Android图片处理内存溢出学习             

原文:

http://blog.csdn.net/huangbiao86/article/details/8072128

最近遇到一个问题,在Android机器上,调用自带的相机拍摄后获得相处,并且对获得的相片进行缩放,旋转,截取等操作,看似很简单,但是却遇到了一个,让人心疼的问题,我这里用五能手机进行测试,当然,功能测试是没有问题,当发给客户去测试的时候,却出现了内存溢出,哎无言啊...

原来他用的是三星的G3手机进行测试的,我们没有这款手机,后来借别人的G3手机测试,果然也出现这个问题:

  1. java.lang.OutOfMemoryError  
  2. at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)  
  3. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:518)  
  4. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:535)  
  5. at com.yippeearts.flashcards.CameraPage$1.onPictureTaken(CameraPage.java:73)  
  6. at android.hardware.Camera$EventHandler.handleMessage(Camera.java:734)  
  7. at android.os.Handler.dispatchMessage(Handler.java:99)  
  8. at android.os.Looper.loop(Looper.java:137)  
  9. at android.app.ActivityThread.main(ActivityThread.java:4514)  
  10. at java.lang.reflect.Method.invokeNative(Native Method)  
  11. at java.lang.reflect.Method.invoke(Method.java:511)  
  12. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)  
  13. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)  
  14. at dalvik.system.NativeStart.main(Native Method)  

这个在不同的手机上出现这种错误还是有点尴尬的。一直以为是对图片的逻辑处理出了什么问题,经过总结发现,估计是因为G3手机拍摄相片分辨率过高,使图片过大,造成过程中内存溢出,通过网上搜索若干解决加载大图片时内存溢出的问题:

 

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。


内存溢出解决办法:

1、模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。由于每张图片先前是压缩的情况,放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下:

  1. // 解决加载图片 内存溢出的问题  
  2. // Options 只保存图片尺寸大小,不保存图片到内存  
  3. BitmapFactory.Options opts = new BitmapFactory.Options();  
  4. // 缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰  
  5. opts.inSampleSize = 4;  
  6. Bitmap bmp = null;  
  7. bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],  
  8.                 opts);  
  9. // 回收  
  10. bmp.recycle();  

2、优化Dalvik虚拟机的堆内存分配

 

对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法:   private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。

Android堆内存也可自己定义大小

对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:

  1. private final static int CWJ_HEAP_SIZE = 610241024 ;  
  2.   
  3. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理  

bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法
★android 中用bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError : bitmap size exceeds VM budget

 

主要是加上这段:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;

 eg1:(通过Uri取图片)

  1. private ImageView preview;  
  2. BitmapFactory.Options options = new BitmapFactory.Options();  
  3. options.inSampleSize = 2;//图片大小,设置越大,图片越不清晰,占用空间越小  
  4. Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, options);  
  5. preview.setImageBitmap(bitmap);  

eg2:(通过路径去图片)

 

  1. private ImageView preview;  
  2. private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg";  
  3. BitmapFactory.Options options = new BitmapFactory.Options();  
  4. options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一  
  5. Bitmap b = BitmapFactory.decodeFile(fileName, options);  
  6. preview.setImageBitmap(b);  
  7. filePath.setText(fileName);  

在图片处理的时候,确保图片引用及时回收。

posted @ 2015-05-12 18:54 半导体 阅读(135) | 评论 (0)编辑 收藏

安卓 html显示时,图片无法加载

<!--  hardwareAccelerated解决4.0启动了硬件加速 ,HTML网络图片无法正常显示的问题-->
android:hardwareAccelerated="false"

posted @ 2015-05-05 20:57 半导体 阅读(113) | 评论 (1)编辑 收藏

安卓显示HTML

方法1、使用 CDATA(推荐)
<string name="demoStr"><Data><![CDATA[ <b>ABC</b> ]]> </Data></string>
方法2、转义HTML标签
<string name="myHeadStr">&lt;b>&lt;u>bold, underline &lt;/u>&lt;/b></string>
在程序里引用:
Html.fromHtml(getResources().getString(R.string.myHeadStr));
效果图
android string html标签用法
string.xml代码
Code   ViewCopyPrint
  1. <string name="test"><Data><![CDATA[ <b><font color="#ff0000">ABC</font></b> ]]></Data></string>  

java代码:

Code   ViewCopyPrint
  1. import android.app.Activity;   
  2. import android.app.AlertDialog;   
  3. import android.content.DialogInterface;   
  4. import android.os.Bundle;   
  5. import android.text.Html;   
  6.   
  7. public class testActivity extends Activity {   
  8.     public void onCreate(Bundle savedInstanceState) {   
  9.         super.onCreate(savedInstanceState);   
  10.         AlertDialog.Builder dialog = new AlertDialog.Builder(testActivity.this);   
  11.         dialog.setTitle("测试HTML标签").setMessage(Html.fromHtml(getString(R.string.test))).setPositiveButton(getString(R.string.btn_confirm), new DialogInterface.OnClickListener() {   
  12.             public void onClick(DialogInterface dialog, int which) {   
  13.   
  14.             }   
  15.         }).create().show();   
  16.     }   
  17. }   

posted @ 2015-05-05 13:39 半导体 阅读(47) | 评论 (0)编辑 收藏

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

一、下载相关包:

eclipse luna下载地址 :  http://www.eclipse.org/downloads/

JDK7.0下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Tomcat7.0下载地址:

http://tomcat.apache.org/download-70.cgi

MAVEN下载地址:http://maven.apache.org/

二、环境变量配置(根据软件安装位置配置如下)

JAVA_HOME: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\;

PATH: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\bin;

M2_HOME:  D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5

PATH D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin

三、    运行eclipse luna

绿色环保,直接运行eclipse.exe就行了


四、导入maven项目前配置

    
A,tomcat
配置





B,JDK配置


C,MAVEN
安装:


D,
导入maven项目:


E,
导入后如果项目报错,请执行:

在项目上右击,选择菜单maven->update project MAVEN会自动搜索项目中需要的jar包)

   F、运行服务:

选择run on server->tomcat 7

iE上输入:http://localhost:8080/项目名   测试一下吧。

posted @ 2015-02-12 10:04 半导体 阅读(2729) | 评论 (1)编辑 收藏

MAVEN环境变量配置

一、JDK配置:JAVA_HOME  PATH 
二、新建M2_HOME环境:  如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5
三、PATH:如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin
     测试Maven环境是否搭建成功,在CMD下输入命令:
      mvn -v
     编译maven项目方法:cmd下指向项目目录下,运行命行:mvn compile
     mvn te

posted @ 2015-02-11 17:41 半导体 阅读(121) | 评论 (0)编辑 收藏

sqlserver创建用户,指定数据库,指定表的权限

http://www.cnblogs.com/gaizai/archive/2011/07/14/2106617.html
记住要选择dbo_owner 别选sysadmin

posted @ 2014-12-03 16:57 半导体 阅读(166) | 评论 (0)编辑 收藏