【仅供内部供应商使用,不提供对外解答和培训】

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

一、特殊名词介绍

二、背景、场景介绍

帆软后台参数的获取是通过WebUtils这个工具类进行获取的,在读取参数时就允许通过RequestParameterHandler对参数进行解析、转换、增删、权限过滤等控制。大多数时候用于配合报表参数使用。

三、接口介绍

Code Block
languagejava
themeEclipse
firstline1
titleRequestParameterHandler.java
linenumberstrue
/*
 * Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
 */

package com.fr.stable.fun;

import com.fr.stable.fun.mark.Immutable;

import javax.servlet.http.HttpServletRequest;

/**
 * @author : richie
 * @since : 8.0
 * 参数获取接口,可以重载此接口对参数获取来源做自定义以及过滤等操作
 */
public interface RequestParameterHandler extends Immutable {

    String XML_TAG = "RequestParameterHandler";

    int CURRENT_LEVEL = 1;

    /**
     * 从HTTP请求中直接获取参数
     *
     * @param req  HTTP请求
     * @param name 参数名
     * @return 参数值
     */
    Object getParameterFromRequest(HttpServletRequest req, String name);

    /**
     * 从HTTP请求中直接获取参数
     *
     * @param req  HTTP请求
     * @param name 参数名
     * @return 参数值
     */
    Object getParameterFromRequestInputStream(HttpServletRequest req, String name);

    /**
     * 从HTTP请求的属性中获取参数
     *
     * @param req  HTTP请求
     * @param name 参数名
     * @return 参数值
     */
    Object getParameterFromAttribute(HttpServletRequest req, String name);

    /**
     * 从内置的JSON格式的参数中获取参数
     *
     * @param req  HTTP请求
     * @param name 参数名
     * @return 参数值
     */
    Object getParameterFromJSONParameters(HttpServletRequest req, String name);

    /**
     * 从HTTP会话中获取参数
     *
     * @param req  HTTP请求
     * @param name 参数名
     * @return 参数值
     */
    Object getParameterFromSession(HttpServletRequest req, String name);

    /**
     * 从会话header中获取参数
     *
     * @param name 参数名
     * @param req http请求
     * @return 参数值
     */
    Object getParameterFromHeader(HttpServletRequest req, String name);

}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持
BI3.6支持
BI4.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<extra-core>
        <LocaleFinder class="your class name"/>
</extra-core>


六、原理说明

接口注册逻辑:接口实例通过ExtraClassManager#addLocaleFinder 注册到 InterProviderFactory 这个国际化的工厂类中注入到具体的 InterProvider 实例中。

接口的生效逻辑:通过InterProviderFactory 获取到 InterProvider 实例,最后通过 getLocText 就可以获取到注入的相关国际化数据了


七、特殊限制说明

String find(); 方法返回的是一个相对于插件JAR的包内文件路径( 比如 com/tptj/demo/hg/locale/demo)。

国际化文件的命名规则:国际化文件按组定义,文件的后缀均为 properties。每一组国际化申明都必须包含一个默认文件 和可选支持的语言文件。

以 com/tptj/demo/hg/locale/demo 这个路径为例。其中com/tptj/demo/hg/locale表示的是实际的包路径,demo表示的是国际化的名称。如果国际化名为demo,则必须存在以下文件 com/tptj/demo/hg/locale/demo.properties

然后每一种支持的语言,增加一个对应的语言文件。比如 com/tptj/demo/hg/locale/demo_zh_CN.properties 表示的是中文国际化文件。

下面看一个实例:

Code Block
languagejs
themeEclipse
titledemo.properties
linenumberstrue
Plugin-Demo_Hello_World=Hello World
Plugin-Demo_Number=number:{}

这是一个默认定义,当用户使用的语言环境没有对应的国际化定义时,则以默认的实现生效。

Code Block
languagejs
themeEclipse
titledemo_zh_CN.properties
linenumberstrue
Plugin-Demo_Hello_World=你好世界
Plugin-Demo_Number=数字:{}


Code Block
languagejs
themeEclipse
titledemo_en_US.properties
linenumberstrue
Plugin-Demo_Hello_World=Hello World
Plugin-Demo_Number=number:{}

上面这组国际化定义,声明了对简中和英文环境的支持

实际调用时:有以下几种调用方式

Code Block
languagejava
themeEclipse
firstline1
linenumberstrue
//设计器调用
InterProviderFactory.getDesignI18nProvider().getLocText("Plugin-Demo_Hello_World");
InterProviderFactory.getDesignI18nProvider().getLocText("Plugin-Demo_Number","100");
//或者
Toolkit.getLocText("Plugin-Demo_Hello_World");
Toolkit.getLocText("Plugin-Demo_Number","100");

//服务端调用
InterProviderFactory.getProvider().getLocText("Plugin-Demo_Hello_World");
InterProviderFactory.getProvider().getLocText("Plugin-Demo_Number","100");

//前端报表预览调用
FR.i18nText("Plugin-Demo_Hello_World");
FR.i18nText("Plugin-Demo_Number","100");

//前端决策平台或仪表板调用
BI.i18nText("Plugin-Demo_Hello_World");
BI.i18nText("Plugin-Demo_Number","100");

注:国际化定义中,可以通过 {} 进行动态拼接

常用的国际化列表为 

语言国际化key
简中zh 或 zh_CN
繁中zh_TW
英文en 或 en_US
日文ja_JP
韩文ko_KR


八、常用链接

demo地址:demo-locale-finder

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。