看看这个配置能低配置怎么玩绝地求生生吗??

> 博客详情
在一些应用中使用较为方便,比如你插入一行数据,通过Post或Get请求得到所有参数,而在一些时候我们是要直接操作对于数据行的一个bean对象,下面的是一个扩展性较好的方法。
注:常规编程时可以简单操作,如下一个bean
public&class&Student&implements&java.io.Serializable{&&
&&&&private&static&final&long&serialVersionUID&=&1L;&&
&&&&private&String&&&
&&&&private&String&&&
&&&&private&String&&&
&&&&private&String&&&
&&&&public&String&getStudentid()&{&&
&&&&&&&&return&&&
&&&&public&void&setStudentid(String&studentid)&{&&
&&&&&&&&this.studentid&=&&&
&&&&public&String&getStudentname()&{&&
&&&&&&&&return&&&
&&&&public&void&setStudentname(String&studentname)&{&&
&&&&&&&&this.studentname&=&&&
&&&&public&String&getStudentbir()&{&&
&&&&&&&&return&&&
&&&&public&void&setStudentbir(String&studentbir)&{&&
&&&&&&&&this.studentbir&=&&&
&&&&public&String&getStudentsex()&{&&
&&&&&&&&return&&&
&&&&public&void&setStudentsex(String&studentsex)&{&&
&&&&&&&&this.studentsex&=&&&
假设视图层将通过Post表单提交一个这样的参数集合:studentid=001,studentname='xiaoli',studentbir='',studentsex='男'
我们在控制层通过多个getParameter()得到对于数据,接下来new Student(),对象赋值得到一个Student的bean,后面再使用什么spring之类的Dao层就插入数据库中持久化了。
以上方法简单也比较好理解,但是扩展性不好,你要是有成百上千个bean,那代码量都是这样,可想而知,冗余,维修性差……
2、下面是在一个项目中借鉴的操作性较好的方法,将任何请求(Post/ Get),参数混乱中的情况下拿到bean:
面向对象好处在之一少不了封装:下面是将任何请求所有参数封装为一个Map&String ,Object&,直接在控制层执行Map&String, Object& m=RequestUtils.getQueryParams(request);就可以啦,下面就是在工具类RequestUtils实现这个静态方 法:
@SuppressWarnings("unchecked")&&
&&&&public&static&Map&String,&Object&&getQueryParams(HttpServletRequest&request)&{&&
&&&&&&&&Map&String,&String[]&&&&
&&&&&&&&if&(request.getMethod().equalsIgnoreCase(POST))&{&&
&&&&&&&&&&&&map&=&request.getParameterMap();&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&//为GET请求时就获取其请求参数的那段信息&&
&&&&&&&&&&&&String&s&=&request.getQueryString();&&
&&&&&&&&&&&&if&(StringUtils.isBlank(s))&{&&
&&&&&&&&&&&&&&&&return&new&HashMap&String,&Object&();&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&&&&&//将得到的HTML数据用UTF-8转码&&
&&&&&&&&&&&&&&&&s&=&URLDecoder.decode(s,&UTF8);&&
&&&&&&&&&&&&}&catch&(UnsupportedEncodingException&e)&{&&
&&&&&&&&&&&&&&&&log.error("encoding&"&+&UTF8&+&"&not&support?",&e);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&map&=&parseQueryString(s);&&
&&&&&&&&}&&
&&&&&&&&Map&String,&Object&&params&=&new&HashMap&String,&Object&(map.size());&&
&&&&&&&&int&&&
&&&&&&&&for&(Map.Entry&String,&String[]&&entry&:&map.entrySet())&{&&
&&&&&&&&&&&&len&=&entry.getValue().&&
&&&&&&&&&&&&if&(len&==&1)&{&&
&&&&&&&&&&&&&&&&params.put(entry.getKey(),&entry.getValue()[0]);&&
&&&&&&&&&&&&}&else&if&(len&&&1)&{&&
&&&&&&&&&&&&&&&&params.put(entry.getKey(),&entry.getValue());&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&return&&&
上面看出,两种请求下做了不同处理,最后将所有参数键值转化为一个Map,
这样之后就可以在控制层用String action=m.get("action").toString();的形式得到各种参数;
前面说了一个项目bean成百个,所有将参数集转化为bean也进行封装,如调用时:Student s=(OrgList) BeanConverter.toJavaBean(new Student(), m,true);m为上面得到的Map参数映射表,具体实现要使用到了Java的反射机制处理,也就是根据传入的bean对象,得到这个对象所在类,并获 取到这个类的所有声明了的方法:Method[] methods = javabean.getClass().getDeclaredMethods();再循环得到打头为set的方法,拿到这个方法的名字如 setStudentsex转换为一个参数studentsex,然后将这个参数与map中的key做识别,有相同的key便将其value插入该 bean中,具体实现如下:
public&static&Object&toJavaBean(Object&javabean,&Map&String,&Object&&m,Boolean&zhuanma)&&&
&&&&//System.out.println(m);&&
&&&&//所有声明了的方法&&
&&&&&&&Method[]&methods&=&javabean.getClass().getDeclaredMethods();&&&
&&&&&&&for&(Method&method&:&methods)&&&
&&&&&&&{&&&
&&&&&&&&&&&&&&&if&(method.getName().startsWith("set"))&&&
&&&&&&&&&&&&&&&{&&&
&&&&&&&&&&&&&&&&//得到该方法的参数类型&&
&&&&&&&&&&&&&&&&Class&?&[]&params&=&method.getParameterTypes();&&
&&&&&&&&&&&&&&&&&&&String&field&=&method.getName();&&&
&&&&&&&&&&&&&&&&&&&field&=&field.substring(field.indexOf("set")&+&3);&&&
&&&&&&&&&&&&&&&&&&&field&=&field.toLowerCase().charAt(0)&+&field.substring(1);&&&
&&&&&&&&&&&&&&&&&&&//System.out.println(field+"----"+m.get(field.toString()));&&
&&&&&&&&&&&&&&&&&&&Object&value=m.get(field.toString());&&
&&&&&&&&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&&&&&&&&&&&&//&convert&types&for&some&popular&ones&&
&&&&&&&&&&&&&&&&&&&&&&&if&(value&!=&null&&!"".equals(value))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&String&pa=params[0].getName().toString();&&
&&&&&&&&&&&&&&&&&&&&&&&&//if&(value&instanceof&java.util.Date)&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(pa.equals("java.util.Date"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value&=&new&java.util.Date(((java.util.Date)&value).getTime());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&
//&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&else&if(pa.equals("java.lang.String")){&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&//value=&new&java.lang.String(Function.PageToDb(value.toString()));&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(zhuanma)value=&new&java.lang.String(Function.PageToDb(value.toString()));&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&else&if(pa.equals("java.lang.Integer")||pa.equals("int")){&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Integer(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}else&if&(pa.equals("java.lang.Long"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Long(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Double"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Double(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Float"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Float(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Short"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Short(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Byte"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Byte(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Character"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&value=&new&java.lang.Character(value);&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&if&(pa.equals("java.lang.Boolean"))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value=&new&java.lang.Boolean(value.toString());&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Don't&call&setter&if&the&value&object&isn't&the&right&type&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(isCompatibleType(value,&params[0]))&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&method.invoke(javabean,&new&Object[]&{&value&});&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&throw&new&Exception(&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"Cannot&set&"&+&field.toString()&+&":&incompatible&types.");&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&}&catch(Exception&e){&&
&&&&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&&&&}&&
&&&&&&&}&&&
&&&&&&&&&&&&&&&}&&
&&&&&&&return&&&&
/////////////
本文前提:参数名称与实体属性一致!
的Web项目中,经常有servlet中接收参数赋值给实体,参数如果多了就很麻烦,这里提供两个简单通用的方法:
比如实体为Student
1.使用mons.beanutils.BeanUtils:
Student stu =newStudent();
BeanUtils.populate(stu, request.getParameterMap());
当然实际工作中,有些参数值为空或者参数类型与实体属性类型不匹配,这就会报异常,因此这个不太可靠,这时可以用方法3
2.利用反射:
获得所有set方法,排除掉Object基类本身的set方法,从get方法中可以得到属性名,而属性名即是request的参数名
3.(最推荐,经过测试) 改装populate方法:
importjava.lang.reflect.M
importjava.util.D
importjavax.servlet.http.HttpServletR
mons.lang3.ArrayU
mons.lang3.StringU
mons.lang3.math.NumberU
mons.lang3.time.DateU
/**Servlet业务中实体工具
&* @author LiuDing
&* -下午08:10:06
publicclassServletBeanTools {
&&&&/**自动匹配参数赋值到实体bean中
&&&&&* @author LiuDing
下午10:23:37
&&&&&* @param bean
&&&&&* @param request
&&&&publicstaticvoidpopulate(Object bean, HttpServletRequest request){
&&&&&&&&Class&!--?extendsObject--& clazz = bean.getClass();
&&&&&&&&Method ms[] = clazz.getDeclaredMethods();
&&&&&&&&String fieldT
&&&&&&&&for(Method m : ms){
&&&&&&&&&&&&mname = m.getName();
&&&&&&&&&&&&if(!mname.startsWith("set")
&&&&&&&&&&&&&&&&&&&&|| ArrayUtils.isEmpty(m.getParameterTypes())){
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&try{
&&&&&&&&&&&&&&&&field = mname.toLowerCase().charAt(3) + mname.substring(4, mname.length());
&&&&&&&&&&&&&&&&value = request.getParameter(field);
&&&&&&&&&&&&&&&&if(StringUtils.isEmpty(value)){
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&fieldType = m.getParameterTypes()[0].getName();
&&&&&&&&&&&&&&&&//以下可以确认value为String类型
&&&&&&&&&&&&&&&&if(String.class.getName().equals(fieldType)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, (String)value);
&&&&&&&&&&&&&&&&}elseif(Integer.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, Integer.valueOf((String)value));
&&&&&&&&&&&&&&&&}elseif(Short.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, Short.valueOf((String)value));
&&&&&&&&&&&&&&&&}elseif(Float.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, Float.valueOf((String)value));
&&&&&&&&&&&&&&&&}elseif(Double.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, Double.valueOf((String)value));
&&&&&&&&&&&&&&&&}elseif(Date.class.getName().equals(fieldType)){
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, DateUtils.parseDate((String)value,"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"));
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&m.invoke(bean, value);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}catch(Exception e){
&&&&&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
将request中的所有参数设置到entityClass类型的对象上
public&class&RequestUtil&{&&
&&&&&*&将request中的所有参数设置到entityClass类型的对象上&
&&&&&*&@param&entityClass&
&&&&&*&@param&request&
&&&&&*&@return&
&&&&public&static&Object&copyParam(Class&entityClass,HttpServletRequest&request){&&
&&&&&&&&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&Object&entity&=&entityClass.newInstance();&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&//把请求中的参数取出&&
&&&&&&&&&&&&Map&allParams&=&request.getParameterMap();&&
&&&&&&&&&&&&Set&entries&=&allParams.entrySet();&&
&&&&&&&&&&&&for&(Iterator&iterator&=&entries.iterator();&iterator.hasNext();)&{&&
&&&&&&&&&&&&&&&&Map.Entry&entry&=&(Map.Entry)&iterator.next();&&
&&&&&&&&&&&&&&&&String&name&=&(String)entry.getKey();&&
&&&&&&&&&&&&&&&&String[]&value&=&(String[])entry.getValue();&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if(value&!=&null){&&
&&&&&&&&&&&&&&&&&&&&if(value.length&==&1){&&
&&&&&&&&&&&&&&&&&&&&&&&&BeanUtils.copyProperty(entity,&name,&value[0]);&&
&&&&&&&&&&&&&&&&&&&&}else{&&
&&&&&&&&&&&&&&&&&&&&&&&&BeanUtils.copyProperty(entity,&name,&value);&&
&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&&&&&return&null;&&
&在到servlet页面上就可以直接写&
Java代码 &
Article&a&=&(Article)RequestUtil.copyParam(Article.class,&request);&&
&不用在通过 request.getparamter();的一个个获取 在插入到article中 ,大大的减少了代码量
Jakarta-Commons- BeanUtils学习笔记:
Author:Tony.zhang& Date:April 22, 2009 Mail:
主要提供了对于进行各种操作。
在一般的写组件的时候,都必须要写和方法,当然假如我们事先已经知道的相关属性和方法,写是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的。但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?就可以帮助我们来解决这个问题。它需要Commons -Collections包和Commons -logging包的支持。
这个包主要提供用于操作的工具类,的主要功能都在这个包里实现。
可以直接和一个属性的值。它将分成种类型:
1Simple——简单类型,如、……
(对于类型,第二个参数直接是属性名即可,详见代码)
2Indexed——索引类型,如数组、……
&(对于,则为“属性名索引值”,注意这里对于和数组都可以用一样的方式进行操作,详见代码)
3Maped——这个不用说也该知道,就是指,比如……
(对于类型,则需要以“属性名(值)”的形式,详见代码)
&&& 访问不同类型的数据可以直接调用函数和。它们都只有个参数,第一个是对象,第二个是要操作的属性名。
把或中的字符串绑定到对象的属性经常要从等对象取出值来赋入中,如果不用框架的绑定功能的话,下面的代码谁都写腻了。
bean.setB(b); … 不妨写一个自动绑定所有属性:
MyBean&bean&=&;
&&&&&&&&HashMap&map&=&new&HashMap();
&&&&&&&&Enumeration&names&=&request.getParameterNames();
&&&&&&&&while&(names.hasMoreElements())
&&&&&&&&&&String&name&=&(String)&names.nextElement();
&&&&&&&&&&map.put(name,&request.getParameterValues(name));
&&&&&BeanUtils.populate(bean,&map);
其中的方法(用于将一个的值填充到一个中)或者方法其实都会调用进行转换。 但只支持一些基本的类型,甚至连类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。对于类型,我参考它的类型实现了一个,而且添加了一个设置日期格式的函数。 要把这个注册,需要如下语句:
因为要注册所以不能再使用的静态方法了,必须创建实例:
BeanUtilsBean&beanUtils&
&&&&&&&&&&&&
&BeanUtilsBean(&convertUtils,&
&PropertyUtilsBean()&)&;
&&&&&&&&beanUtils.setProperty(&bean,&name,&value&)&;
在中的应用:
下面的代码是我们经常在中为了获得浏览器带来的参数的方法:
DynaActionForm&daf&
&(DynaActionForm)form&;
&&&&&&&&User&user&
&&&&&&&&user.setId(&daf.getString(&
&&&&&&&&user.setPassword(&daf.getString(&
&&&&&&&&user.setUsername(&daf.getString(&
是不是觉得每次写这些都是在重复造轮子呢?
在看看用写的:
BeanUtils.copyProperties(&user,&daf&)&;
就是这么简单
&HashMap&address&
&HashMap();&
&String[]&otherI&
&ArrayList&&
&ArrayList&&
Commons- BeanUtils1.8.jar+JDK1.5
&com.cache.domain&;
&java.util.HashMap&;
&mons.beanutils.BeanUtils&;
&*&@Author:Tony.Zhang&&Apr&22,&:16&PM
&MainClass&{
&Exception
&main(&String[]&args&)&
&Exception{
&&&&&&&&Test&test&
&&&&&&&&test.setName(&
&BeanUtils.getProperty(&bean,&name&)
&&&&&&&&System.out.println(BeanUtils.getProperty(&test,&
&&&&&&&&HashMap&map&
&HashMap();
&&&&&&&&map.put(&
&&&&&&&&map.put(&
&BeanUtils.setProperty(&bean,&name,&value&)
&&&&&&&&BeanUtils.setProperty(&test,&
&&&&&&&&System.out.println(BeanUtils.getProperty(&test,&
telephone(1)
&&&&&&&&&*&直接进行Bean之间的clone&复制后的2个Bean的同一个属性可能拥有同一个对象的ref,
&&&&&&&&&*&这个在使用时要小心,特别是对于属性为类的情况。
&&&&&&&&Test&test2&
&&&&&&&&BeanUtils.copyProperties(&test2,&test&);
&&&&&&&&System.out.println(BeanUtils.getProperty(&test2,&
注:以上实例使用
其余的功能大家继续挖掘吧,可以参考官方的说明J
ConvertUtilsBean&convertUtils&=&new&ConvertUtilsBean();
&&&&&&&&DateConverter&dateConverter&=&new&DateConverter();
&&&&&&&&convertUtils.register(dateConverter,Date.class);
/////////////////////////////////
import java.lang.reflect.F import java.lang.reflect.M import java.util.ArrayL import java.util.D import java.util.E import java.util.L
import javax.servlet.http.HttpServletR
/** &* @author Administrator &* 作用:将request中的参数封装到bean中 &* @param &T& Bean对象 &*/ public class RequestSetBean&T& { &public T getObj(HttpServletRequest request, Class&T& clazz) {
&&List&String& paraNameList = new ArrayList&String&(); && &&// 取得Request中的参数名称 &&@SuppressWarnings("rawtypes") &&Enumeration enu = request.getParameterNames(); &&while (enu.hasMoreElements()) { &&&String paraName = (String) enu.nextElement(); &&&paraNameList.add(paraName); &&&System.out.println(paraName+": "+request.getParameter(paraName)); &&} && &&try { &&&T t = clazz.newInstance();
&&&Field field =
&&&for (int i = 0; i & paraNameList.size(); i++) {
&&&&String paraName = paraNameList.get(i);
&&&&try { &&&&&//找到bean中的相应属性 &&&&&field = clazz.getDeclaredField(paraName); &&&&} catch (Exception e) { &&&&& &&&&}
&&&&// 这里是获取bean属性的类型 &&&&Class&?& beanType = field.getType();
&&&&Object value = request.getParameter(paraName);
&&&&// 设置参数类型,此类型应该跟javaBean里边的类型一样 &&&&// 处理日期类型不匹配问题 &&&&if (beanType == java.util.Date.class) { &&&&&value = (Date)request.getAttribute(paraName); &&&&} &&&&// 处理int类型不匹配问题 &&&&if (beanType == int.class) { &&&&&value = new Integer(value.toString()); &&&&} &&&&// 处理float类型不匹配问题 &&&&if (beanType == float.class) { &&&&&value = new Float(value.toString()); &&&&} &&&&// 处理double类型不匹配问题 &&&&if (beanType == double.class) { &&&&&value = new Double(value.toString()); &&&&}
&&&&String setMethodName = "set" + firstUpperCase(paraName); &&&&// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型; &&&&Method m = t.getClass().getMethod(setMethodName, beanType);
&&&&//第二个参数是传给set方法数据
&&&&m.invoke(t, value); &&&& &&&}
&&& &&&obj = &&& &&} catch (Exception e) { &&&e.printStackTrace(); &&} && &}
&// 首写字母变大写 &public static String firstUpperCase(String old) { &&return old.substring(0, 1).toUpperCase() + old.substring(1); &} }
人打赏支持
码字总数 605863
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥播放列表加载中...
正在载入...
分享视频:
嵌入代码:
拍下二维码,随时随地看视频
Korean student model
上 传 者:
内容介绍:
Korean student model
我来说点啥
版权所有 CopyRight
| 京网文[0号 |
| 京公网安备:
互联网药品信息服务资格证:(京)-非经营性- | 广播电视节目制作经营许可证:(京)字第403号
<img src="" width="34" height="34"/>
<img src=""/>
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<img width="132" height="99" src=""/>
在线人数:
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<img src="///img/blank.png" data-src=""/>
<img src="///img/blank.png" data-src="http://"/>
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/>
<i data-vid="" class="ckl_plays">
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/><i data-vid="" class="ckl_plays">
没有数据!
{upload_level_name}
粉丝 {fans_count}
{video_count}
{description}

我要回帖

更多关于 玩绝地求生的电脑配置 的文章

 

随机推荐