使用自己的translator

本文介绍了解决Tapestry4框架中表单提交中文乱码的问题,通过自定义转换器MyStringTranslator实现对中文输入的正确编码转换。

在tapestry4中,如果表单中有文件上传组件和文本输入框,则表单提交后文本输入框中输入的中文将变为乱码,我的页面、java文件都是GBK编码,网上有人说都采用utf-8编码就可以也不敢试。

跟了一下tapestry代码,发现textfield组件使用了translator进行了输入值的转换,于是自己定义了一个translator来转换中文输入为正确的编码格式。

1.定义自己的转换器:

package org;
        public class MyStringTranslator extends StringTranslator {

    
protected Object parseText(IFormComponent field, ValidationMessages messages, String text) {
        String myText 
= null;
        
try {
            myText 
= new String(text.getBytes("iso-8859-1"),"GBK");
        }
 catch (Exception ex) {
            myText 
= text;
        }

        
return myText
    }


}

2.在hivemoudle中配置这个转换器:

<contribution configuration-id="tapestry.form.translator.Translators">
<bean name="mystring" class="org.MyStringTranslator"/>    
</contribution>

3.在html或者page中使用这个转换器:

<span jwcid="@TextField" value="ognl:value" translator="translator:mystring"/>

 

 

<think>我们正在讨论如何使用SNMP MIB translator工具进行MIB文件转换。根据提供的引用,特别是引用[1]和引用[2],我们可以了解到一些关键信息。 引用[1]给出了一个使用snmpttconvertmib工具进行批量转换的示例命令,它将多个HUAWEI开头的MIB文件转换为snmptt.conf.huawei配置文件。 引用[2]则解释了为什么使用独立的翻译器(如snmptt)是一个好主意,因为它避免了每次翻译都需要检索OID,并且更新MIB时不需要重启snmptrapd。 因此,我们可以这样回答用户的问题: 步骤1:安装必要的工具(如snmptt)。不同的系统安装方式可能不同,例如在基于RPM的系统上可以使用yum install snmptt。 步骤2:准备MIB文件。通常,我们需要将设备厂商提供的MIB文件下载到本地,比如放在某个目录(例如:/usr/share/snmp/mibs/)。 步骤3:使用转换工具(如snmpttconvertmib)将MIB文件转换成snmptt可识别的配置文件。引用[1]提供了一个批量转换的例子: for i in HUAWEI*; do /usr/bin/snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf.huawei --net_snmp_perl; done 这个命令会遍历当前目录下所有以HUAWEI开头的文件,并将它们转换为配置文件,输出到/etc/snmp/snmptt.conf.huawei。 另外,引用[4]提到了另一种转换方式,即使用zabbix自带的Perl脚本(zabbix_trap_receiver.pl)来处理trap,但这与MIB转换工具不同。 注意:转换后的配置文件(如snmptt.conf.huawei)需要被包含到snmptt的主配置文件中(通常是/etc/snmp/snmptt.ini),或者直接放在snmptt的配置目录下(如/etc/snmp/snmptt.conf.d/),具体取决于snmptt的配置。 此外,引用[3]描述了一个更复杂的流程,其中snmptt将trap翻译后写入syslog,然后由SEC(事件收集器)处理,再调用Nagios。但用户目前的问题只关注MIB转换工具的使用。 因此,我们主要介绍snmpttconvertmib工具的使用。 总结步骤: 1. 安装snmptt(包含snmpttconvertmib工具)。 2. 将MIB文件放在一个目录中。 3. 使用snmpttconvertmib转换MIB文件(可以单个转换,也可以批量转换)。 4. 将生成的配置文件放到snmptt的配置目录中,并确保snmptt.ini包含该配置文件(或者直接合并到主配置文件)。 5. 重启snmptt服务(注意不是snmptrapd服务)以使配置生效。 注意:转换过程中可能需要指定MIB文件的搜索路径,如果MIB文件之间有依赖关系,可能需要将依赖的MIB文件也放在同一目录下。 下面是一个具体的例子(单个文件转换): snmpttconvertmib --in=HUAWEI-MIB.txt --out=/etc/snmp/snmptt.conf.huawei --net_snmp_perl 参数说明: --in:输入的MIB文件 --out:输出的配置文件 --net_snmp_perl:使用Net-SNMP的Perl模块来解析MIB(需要安装Net-SNMP的Perl模块) 如果遇到依赖问题,可以使用--mib_dir参数指定MIB文件的搜索路径,例如: snmpttconvertmib --in=HUAWEI-MIB.txt --out=/etc/snmp/snmptt.conf.huawei --net_snmp_perl --mib_dir=/usr/share/snmp/mibs 另外,批量转换时,如果多个MIB文件有依赖,建议先将所有MIB文件放在同一目录,然后使用一个循环逐个转换(注意:每个MIB文件单独转换,输出到同一个配置文件时使用追加模式,或者输出到不同的文件再合并)。 但是,引用[1]中的命令是追加到同一个输出文件,所以使用循环时,每次转换一个文件并追加到同一个输出文件。注意:如果多次运行该命令,输出文件会重复追加,所以需要先清空输出文件或者确保只运行一次。 另一种方式是使用通配符一次性传入多个文件,但snmpttconvertmib的--in参数不支持多个文件,所以循环是合适的。 最后,生成相关问题。</think>### 如何使用 SNMP MIB Translator 工具进行 MIB 文件转换 #### 步骤详解 1. **工具安装与准备** 安装 SNMPTT(SNMP Trap Translator)工具包,通常包含 `snmpttconvertmib` 命令: ```bash yum install snmptt # RHEL/CentOS apt install snmptt # Debian/Ubuntu ``` 将设备厂商提供的 MIB 文件(如 `HUAWEI-MIB.txt`)上传至服务器目录(例如:`/usr/share/snmp/mibs/`)。 2. **单文件转换** 使用以下命令转换单个 MIB 文件: ```bash snmpttconvertmib --in=/path/to/MIB_FILE --out=/etc/snmp/snmptt.conf --net_snmp_perl ``` - `--in`:输入 MIB 文件路径 - `--out`:生成的配置文件路径 - `--net_snmp_perl`:使用 Net-SNMP Perl 解析器(确保已安装 `net-snmp-perl` 包)[^1] 3. **批量转换(推荐)** 对同一厂商的多个 MIB 文件进行批量处理: ```bash cd /path/to/mibs for i in VENDOR-PREFIX*; do snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf.vendor --net_snmp_perl done ``` 此命令会将所有以 `VENDOR-PREFIX` 开头的 MIB 文件转换并合并到 `snmptt.conf.vendor` 中[^1]。 4. **配置集成** 将生成的配置文件链接到 SNMPTT 主配置: ```bash echo "include /etc/snmp/snmptt.conf.vendor" >> /etc/snmp/snmptt.ini ``` 5. **重启服务** ```bash systemctl restart snmptt # 独立翻译器无需重启 snmptrapd[^2] ``` #### 关键注意事项 - **依赖处理**:若 MIB 文件存在交叉引用,需将所有依赖 MIB 放在同一目录,或通过 `--mib_dir` 指定搜索路径: ```bash snmpttconvertmib --mib_dir=/usr/share/snmp/mibs/ ... ``` - **权限管理**:确保输出目录(如 `/etc/snmp/`)有写入权限。 - **调试模式**:添加 `--debug` 参数查看解析细节。 - **独立进程优势**:翻译器作为独立守护进程运行,更新 MIB 时无需重启 `snmptrapd` 服务,避免中断 TRAP 接收[^2]。 #### 典型应用场景 转换后的配置文件使 SNMPTT 能将原始 TRAP 的 OID 翻译为可读信息(如 `linkDown`),并传递给后续处理层(如写入 syslog 或触发 Nagios 告警)[^3]。例如 Zabbix 通过 Perl 脚本接收翻译后的 TRAP 数据[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值