精华内容
下载资源
问答
  • 假设您要传递原始数据类型,例如复杂的Java对象 java.util.Data,java.lang.List,泛型类,数组以及通过URL参数所需的所有内容,以便页面加载后任何网页上预设默认值。 共同的任务? 是的,但是可用的解决方案...

    假设您要传递原始数据类型,例如复杂的Java对象
    java.util.Data,java.lang.List,泛型类,数组以及通过URL参数所需的所有内容,以便在页面加载后在任何网页上预设默认值。 共同的任务? 是的,但是可用的解决方案主要限于java.lang.String的编码/解码。 我将展示的方法对数据类型没有任何限制。 URL大小的限制只有一个限制。 长度超过2083个字符的URL在旧的IE版本中可能无法正常工作。 现代Firefox,Opera和Safari可以处理URL中的至少80000个字符。

    如果我们将对象序列化为JSON并在服务器端反序列化它们,则可以通过URL参数传递任何类型的对象。 编码的JSON字符串具有有效的
    格式,这是一种方法! 好吧,但是有一个问题。 如果对象是非通用类型,则从JSON格式序列化/反序列化可以正常工作。 但是,如果对象属于通用类型,则通用类型信息会因为Java Type Erasure而丢失。 在这种情况下该怎么办? 我要演示的解决方案不仅仅限于JSF,而是在开发Java / Web前端时,我正在这个圈子中旋转……所以,让我们开始吧。 首先,我们需要一个适当的转换器来接收JSON格式的URL参数,并将其转换回Java。 PrimeFaces扩展提供了一个– JsonConverter.java。 怎么运行的? 以下示例显示如何将JsonConverter应用于f:viewParam,以将JSON格式的字符串列表转换为Java中的列表。

    <f:metadata>
        <f:viewParam name='subscriptions' value='#{subscriptionController.subscriptions}'>
            <pe:convertJson type='java.util.List<java.lang.String>' />
        </f:viewParam>
    </f:metadata>
    
    <h:selectManyCheckbox value='#{subscriptionController.subscriptions}'>
        <f:selectItem id='item1' itemLabel='News' itemValue='1' />
        <f:selectItem id='item2' itemLabel='Sports' itemValue='2' />
        <f:selectItem id='item3' itemLabel='Music' itemValue='3' />
    </h:selectManyCheckbox>

    JsonConverter具有一种可选的属性类型。 我们不需要为诸如boolean或int之类的原语提供数据类型信息。 但是通常,类型信息是必要的属性。 它指定值对象的数据类型。 支持任何原始类型,数组,非通用或通用类型。 该类型由完全限定的类名(原始类型除外)组成。 例子:

    'long[]'
    'java.lang.String'
    'java.util.Date'
    'java.util.Collection<java.lang.Integer>'
    'java.util.Map<java.lang.String, com.prime.FooPair<java.lang.Integer, java.util.Date>>'
    'com.prime.FooNonGenericClass'
    'com.prime.FooGenericClass<java.lang.String, java.lang.Integer>'
    'com.prime.FooGenericClass<int[], com.prime.FooGenericClass<com.prime.FooNonGenericClass, java.lang.Boolean>>'

    该类型的字符串在运行时进行解析。 JsonConverter的代码在这里可用 (供有兴趣的读者使用)。 JsonConverter基于其他三个类: ParameterizedTypeImpl.java
    GsonConverter.javaDateTypeAdapter.java 最后一个是用于日期的特殊适配器,因为java.util.Date应该转换为毫秒长,然后再转换回java.util.Date。 到目前为止,一切都很好。 但是,如何在Java端准备这些值作为URL参数呢? 我将展示一个可用于该目的的实用程序类。 请阅读评论,它们是不言自明的。

    import org.apache.log4j.Logger;
    import org.primefaces.extensions.converter.JsonConverter;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import javax.faces.context.FacesContext;
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * Builder for request parameters.
     */
    public class RequestParameterBuilder {
    
        private Logger LOG = Logger.getLogger(RequestParameterBuilder.class);
    
        private StringBuilder buffer;
        private String originalUrl;
        private JsonConverter jsonConverter;
        private String encoding;
        private boolean added;
    
        /**
         * Creates a builder instance by the current request URL.
         */
        public RequestParameterBuilder() {
            this(((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURL()
                .toString());
        }
    
        /**
         * Creates a builder instance by the given URL.
         *
         * @param url URL
         */
        public RequestParameterBuilder(String url) {
            buffer = new StringBuilder(url);
            originalUrl = url;
            jsonConverter = new JsonConverter();
    
            encoding = FacesContext.getCurrentInstance().getExternalContext().getRequestCharacterEncoding();
            if (encoding == null) {
                encoding = 'UTF-8';
            }
        }
    
        /**
         * Adds a request parameter to the URL without specifying a data type of the given parameter value.
         * Parameter's value is converted to JSON notation when adding. Furthermore, it will be encoded
         * according to the acquired encoding.
         *
         * @param name name of the request parameter
         * @param value value of the request parameter
         * @return RequestParameterBuilder updated this instance which can be reused
         */
        public RequestParameterBuilder paramJson(String name, Object value) throws UnsupportedEncodingException {
            return paramJson(name, value, null);
        }
    
        /**
         * Adds a request parameter to the URL with specifying a data type of the given parameter value. Data type is sometimes
         * required, especially for Java generic types, because type information is erased at runtime and the conversion to JSON
         * will not work properly. Parameter's value is converted to JSON notation when adding. Furthermore, it will be encoded
         * according to the acquired encoding.
         *
         * @param name name of the request parameter
         * @param value value of the request parameter
         * @param type data type of the value object. Any primitive type, array, non generic or generic type is supported.
         *             Data type is sometimes required to convert a value to a JSON representation. All data types should be
         *             fully qualified.
         * @return RequestParameterBuilder updated this instance which can be reused
         */
        public RequestParameterBuilder paramJson(String name, Object value, String type)
            throws UnsupportedEncodingException {
            jsonConverter.setType(type);
    
            String jsonValue;
            if (value == null) {
                jsonValue = 'null';
            } else {
                jsonValue = jsonConverter.getAsString(null, null, value);
            }
    
            if (added || originalUrl.contains('?')) {
                buffer.append('&');
            } else {
                buffer.append('?');
            }
    
            buffer.append(name);
            buffer.append('=');
            buffer.append(URLEncoder.encode(jsonValue, encoding));
    
            // set a flag that at least one request parameter was added
            added = true;
    
            return this;
        }
    
        /**
         * Adds a request parameter to the URL. This is a convenient method for primitive, plain data types.
         * Parameter's value will not be converted to JSON notation when adding. It will be only encoded
         * according to the acquired encoding. Note: null values will not be added.
         *
         * @param name name of the request parameter
         * @param value value of the request parameter
         * @return RequestParameterBuilder updated this instance which can be reused
         */
        public RequestParameterBuilder param(String name, Object value) throws UnsupportedEncodingException {
            if (value == null) {
                return this;
            }
    
            if (added || originalUrl.contains('?')) {
                buffer.append('&');
            } else {
                buffer.append('?');
            }
    
            buffer.append(name);
            buffer.append('=');
            buffer.append(URLEncoder.encode(value.toString(), encoding));
    
            // set a flag that at least one request parameter was added
            added = true;
    
            return this;
        }
    
        /**
         * Builds the end result.
         *
         * @return String end result
         */
        public String build() {
            String url = buffer.toString();
    
            if (url.length() > 2083) {
                LOG.error('URL ' + url + ' is longer than 2083 chars (' + buffer.length() +
                    '). It may not work properly in old IE versions.');
            }
    
            return url;
        }
    
        /**
         * Resets the internal state in order to be reused.
         *
         * @return RequestParameterBuilder reseted builder
         */
        public RequestParameterBuilder reset() {
            buffer = new StringBuilder(originalUrl);
            jsonConverter.setType(null);
            added = false;
    
            return this;
        }
    }

    通常,使用RequestParameterBuilder的bean通过调用paramJson(…)或param(…)提供参数化的URL。

    import java.io.Serializable;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    
    /**
     * UrlParameterProvider bean.
     */
    @ManagedBean
    @SessionScoped
    public class UrlParameterProvider implements Serializable {
    
        private String parametrizedUrl;
    
        @PostConstruct
        protected void initialize() {
            RequestParameterBuilder rpBuilder = new RequestParameterBuilder('/views/examples/params.jsf');
            try {
                List<String> subscriptions = new ArrayList<String>();
                tableBlockEntries.add('2');
                tableBlockEntries.add('3');
    
                // add the list to URL parameters with conversion to JSON
                rpBuilder.paramJson('subscriptions', subscriptions, 'java.util.List<java.lang.String>');
    
                // add int values to URL parameters without conversion to JSON (just for example)
                rpBuilder.param('min', 20);
                rpBuilder.param('max', 80);   
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
    
            parametrizedUrl = rpBuilder.build();
        }
    
        public String getParametrizedUrl() {
            return parametrizedUrl;
        }
    }

    在XHTML中使用– h:outputLink示例

    <h:outputLink value='#{urlParameterProvider.parametrizedUrl}'>
        Parametrized URL
    </h:outputLink>

    一旦用户单击链接并以相对路径/视图/示例/params.jsf登陆目标页面,他/她将看到一个预先检查的h:selectManyCheckbox。 现实世界更加复杂。 实际上,我已经写了很多内置JsonConverter的自定义转换器。 因此,附加了自定义转换器,而不是<pe:convertJson type ='…'/>。 这个主题超出了这篇文章。

    参考:来自JCG合作伙伴 Oleg Varaksin的URL参数中的复杂对象传递, 位于软件开发博客上。

    翻译自: https://www.javacodegeeks.com/2013/03/passing-complex-objects-in-url-parameters.html

    展开全文
  • .NET将字符串转换成List<T>

    千次阅读 2015-06-02 09:22:51
    有时需要将一个字符串分隔后,转换成指定类型数组或List,比如服务器端收到... 字符串转换成List看到了关于这个讨论,整理如下。我们可用Array.ConvertAll 泛型方法来实现,代码如下:string str = "56,65

    有时需要将一个字符串分隔后,转换成指定类型的数组或List<T>,比如服务器端收到提交的一组checkbox的值,可能是一个ID串,类似:56,657,0,1,2,3,4,5,6,7,8,需要将它转成一个int数组或List<T>再进行后续处理。

     

    将字符串转换成List<T>中看到了关于这个的讨论,整理如下。

    我们可用Array.ConvertAll 泛型方法来实现,代码如下:

    string str = "56,657,0,1,2,3,4,5,6,7,8";
    int[] arrInt = Array.ConvertAll<string, int>(str.Split(','), s => int.Parse(s));
    foreach (int i in arrInt) Console.WriteLine(i);
    

     

    或者,我们想用到一些“奇技淫巧”,比如将这功能做成string的扩展方法:

    public static List<T> ToList<T>(this string str, char split, Converter<string, T> convertHandler)
    {
        if (string.IsNullOrEmpty(str))
        {
            return new List<T>();
        }
        else
        {
            string[] arr = str.Split(split);
            T[] Tarr = Array.ConvertAll(arr, convertHandler);
            return new List<T>(Tarr);
        }
    }
    

    调用方法:

    List<int> intList = str.ToList<int>(',', s => int.Parse(s));
    展开全文
  • 1 length属性是针对数组说,比如说你声明了一个数组,则可用其返回数组长度,js里面咱们也是 通过对象length属性获取长度。  2length()方法是针对字符串String说,获取字符长度  3.size()...
     1 length属性是针对数组说的,比如说你声明了一个数组,则可用其返回数组的长度,在js里面咱们也是
    通过对象的length属性获取长度的。
     2length()方法是针对字符串String说的,获取字符串的长度
     3.size()方法是针对泛型集合说的,获取泛型包含的元素个数
    展开全文
  • 9.1 数组类型的字符串 243 9.1.1 C字符串值和C字符串变量 243 9.1.2 cstring 库的其他函数 247 9.1.3 C字符串的输入和输出 250 9.2 字符操作工具 252 9.2.1 字符输入/输出 252 9.2.2 成员函数get和put 252 ...
  • 14.2.6 检查字符串中的字符和文本元素 14.2.7 其他字符串操作 14.3 高效率构造字符串 14.3.1 构造StringBuilder对象 14.3.2 StringBuilder的成员 14.4 获取对象的字符串表示:ToString 14.4.1 指定具体的格式...
  • 官方core java几次拿起放下,thinking in java看了两次都停泛型那章。上个月买了只G4,换下了我用了2年多nokia 3250,信誓旦旦地说要android下写程序,很快又冷却掉了。一是上面说java对我来说有点难,...
  • 本书是第I卷,以开发人员项目开发经常遇到问题和必须掌握技术为中心,介绍了应用C#进行程序开发各个方面知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员项目开发经常遇到问题和必须掌握技术为中心,介绍了应用C#进行程序开发各个方面知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员项目开发经常遇到问题和必须掌握技术为中心,介绍了应用C#进行程序开发各个方面知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  •  实例084 使用正则表达式检查字符重复出现词 99  实例085 使用正则表达式替换字符串 101  实例086 使用正则表达式拆分字符串 102  实例087 使用正则表达式验证输入字母 102  实例088 使用正则表达式...
  • asp.net知识库

    2015-06-18 08:45:45
    .NET 2.0中的字符串比较 小试ASP.NET 2.0的兼容性 为 asp.net 2.0 的菜单控件增加 target 属性 ASP.NET 2.0 的内部变化 常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1...
  • 实例042 去掉字符中的所有空格 54 实例043 从字符分离文件路径、文件名及 扩展名 55 实例044 获取字符汉字个数 57 实例045 批量替换某一类字符串 58 实例046 对字符串进行加密与解密 59 3.3 常用数字...
  • python-3.7.0b5下載

    2018-07-21 10:22:12
    编译器不是编译定义时注释执行表达式代码,而是将注释以字符串形式存储。如果需要,可以使用typing.get_type_hints()运行时解析注释。不需要解析常见情况下,注释存储成本更低,并且启动时间更快...
  • 微软 VB2010 源码包

    2013-05-22 02:21:18
    DrawUserControl:演示如何创建自定义绘制用户控件、窗体使用它们、使控件能够对事件作出响应,以及定义设计视图使用属性 DynamicControls:演示如何运行时将控件添加到 Windows 窗体应用程序中的...
  • 第 一行代码 Java 视频讲解版从初学者角度,以丰富例子、通俗易懂语言、简单图示,详细地介绍了Java开发重点用到多种技术。全书分为15章,包括Java简介、程序基本概念、面向对象基本概念、面向对象高 级...
  • 2)掌握C#中的泛型用法; 3)掌握C#基本流程语句; 4)掌握C#随机数生成; 5)了解C#异常处理流程; 6)掌握C#计时器及对代码性能优化。 7)本实验注重算法实现,实现功能前提下,尽量优化计算...
  • 2.2.6 实现一个函数,把一个字符串中的字符从小写转为大写 2.2.7 随机输入一个数,判断它是不是对称数(回文数)(如3,121,12321,45254)。不能用字符串库函数 2.2.8 求2~2000的所有素数.有足够的内存,要求尽量...
  • 12.2.3布尔型和字符型包装器自动装/拆箱378 12.3元数据378 12.3.1注释基础知识379 12.3.2指定一个保留策略380 12.3.3使用反射运行时获得注释380 12.3.4AnnotatedElement接口383 12.3.5使用默认值383 ...
  • C#全能速查宝典

    热门讨论 2014-04-26 16:16:27
    2.2.32 SelectionLength属性——控件选定的字符数 184 2.2.33 SelectionRange 属性——设置选定的日期范围 185 2.2.34 SelectionStart属性——选择的起始位置的字符索引 185 2.2.35 TextBox控件——输入或显示文本...
  • Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    4.5.1 查找以空字符结尾的字符串的长度 169 4.5.2 连接以空字符结尾的字符串 170 4.5.3 复制以空字符结尾的字符串 171 4.5.4 比较以空字符结尾的字符串 172 4.5.5 搜索以空字符结尾的字符串 173 4.6 C++/CLI...
  • 4.5.1 查找以空字符结尾的字符串的长度 169 4.5.2 连接以空字符结尾的字符串 170 4.5.3 复制以空字符结尾的字符串 171 4.5.4 比较以空字符结尾的字符串 172 4.5.5 搜索以空字符结尾的字符串 173 4.6 C++/CLI...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...
  • Java资源包01

    2016-08-31 09:16:25
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...
  • java开源包101

    2016-07-13 10:11:08
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    开发它是用于UTF-8 Oracle实例使用ASCII编码Oracle 数据库来正确传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language缩写,它绝不是简单另外一种模板引擎,而是新一代模板引擎,...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

在泛型中可用的字符