struts2 国际化 <s:if test="%{#session.WW_TRANS_I18N_LOCALE.toString()=='zh_CN'}">

本文介绍如何利用Java会话获取当前用户的语言偏好,并根据此偏好切换网页显示的语言,实现英文版或中文版的无缝切换。

参考:http://yangzhibin-java.iteye.com/blog/441792

 

<s:if test="%{#session.WW_TRANS_I18N_LOCALE.toString()=='zh_CN'}">
  <a href="${pageContext.request.contextPath}/admin/login_loginUI.action?request_locale=en_US">English</a>
</s:if>
<s:else>
  <a href="${pageContext.request.contextPath}/admin/login_loginUI.action?request_locale=zh_CN">中文</a>
</s:else>


 注意一定要用toString(),因为session.WW_TRANS_I18N_LOCALE返回的是Locale对象,只有转换成String才能比较

 

<sql id="ChannelFundDetailPageQueryCondition"> <if test="page_query_model !=null and page_query_model.params !=null"> <where> <if test="page_query_model.params.dt_start != null and page_query_model.params.dt_start != ''"> <![CDATA[trade_time >= #{page_query_model.params.dt_start}]]> </if> <if test="page_query_model.params.dt_end != null and page_query_model.params.dt_end != ''"> AND <![CDATA[trade_time <= #{page_query_model.params.dt_end}]]> </if> <if test="page_query_model.params.tenant_id !=null and page_query_model.params.tenant_id !=''"> AND tenant_id=#{page_query_model.params.tenant_id} </if> <if test="page_query_model.params.mch_id !=null and page_query_model.params.mch_id !=''"> AND mch_id=#{page_query_model.params.mch_id} </if> <if test="mch_ids !=null and mch_ids !=''"> AND mch_id in <foreach collection="mch_ids" item="mch_id" index="index" open="(" close=")" separator=","> #{mch_id} </foreach> </if> <if test="page_query_model.params.channel_type !=null and page_query_model.params.channel_type !=''"> AND channel_type=#{page_query_model.params.channel_type} </if> <if test="page_query_model.params.trans_type !=null and page_query_model.params.trans_type !=''"> AND trans_type=#{page_query_model.params.trans_type} </if> <if test="page_query_model.params.trans_amount !=null"> AND trans_amount=#{page_query_model.params.trans_amount} </if> <if test="page_query_model.params.fund_dt_start != null and page_query_model.params.fund_dt_start != ''"> AND <![CDATA[fund_time >= #{page_query_model.params.fund_dt_start}]]> </if> <if test="page_query_model.params.fund_dt_end != null and page_query_model.params.fund_dt_end != ''"> AND <![CDATA[fund_time <= #{page_query_model.params.fund_dt_end}]]> </if> <if test="page_query_model.params.pay_serial_no !=null and page_query_model.params.pay_serial_no !=''"> AND pay_serial_no=#{page_query_model.params.pay_serial_no} </if> <if test="page_query_model.params.channel_serial_no !=null and page_query_model.params.channel_serial_no !=''"> AND channel_serial_no=#{page_query_model.params.channel_serial_no} </if> <if test="page_query_model.params.original_currency !=null and page_query_model.params.original_currency !=''"> AND original_currency=#{page_query_model.params.original_currency} </if> <if test="page_query_model.params.source_from !=null and page_query_model.params.source_from !=''"> AND source_from=#{page_query_model.params.source_from} </if> <if test="page_query_model.params.summary_id !=null and page_query_model.params.summary_id !=''"> AND summary_id=#{page_query_model.params.summary_id} </if> <if test="summary_ids !=null and summary_ids !=''"> AND summary_id in <foreach collection="summary_ids" item="summary_id" index="index" open="(" close=")" separator=","> #{summary_id} </foreach> </if> <if test="page_query_model.params.channel_trans_type !=null and page_query_model.params.channel_trans_type !=''"> AND instr(channel_trans_type, #{page_query_model.params.channel_trans_type}) > 0 </if> <if test="page_query_model.params.opposite_account_temp !=null and page_query_model.params.opposite_account_temp !=''"> AND instr(opposite_account_temp, #{page_query_model.params.opposite_account_temp}) > 0 </if> <if test="page_query_model.params.commodity_name !=null and page_query_model.params.commodity_name !=''"> AND instr(commodity_name, #{page_query_model.params.commodity_name}) > 0 </if> <if test="page_query_model.params.business_describe_temp !=null and page_query_model.params.business_describe_temp !=''"> AND instr(business_describe_temp, #{page_query_model.params.business_describe_temp}) > 0 </if> <if test="page_query_model.params.memo_info !=null and page_query_model.params.memo_info !=''"> AND instr(memo_info, #{page_query_model.params.memo_info}) > 0 </if> </where> </if> </sql> 如果我送的commodity_name为"",这段sql会拼接成什么
最新发布
08-26
<think>首先,用户的问题是:如果我送的commodity_name为"",这段sql会拼接成什么? 用户提供的代码是一个MyBatis的动态SQL片段。它使用`<if>`标签来条件性地添加SQL部分。具体来说,它检查`commodity_name`参数是否为null或空字符串("")。 在代码中,相关的部分是: ```xml <if test="page_query_model.params.commodity_name !=null and page_query_model.params.commodity_name !=''"> AND instr(commodity_name, #{page_query_model.params.commodity_name}) > 0 </if> ``` 用户说“送的commodity_name为""”,意思是传入的`commodity_name`参数是一个空字符串。 根据条件:`test="page_query_model.params.commodity_name !=null and page_query_model.params.commodity_name !=''"` - `page_query_model.params.commodity_name != null`:如果传入的是空字符串,它不等于null,所以这个条件为true。 - `page_query_model.params.commodity_name != ''`:传入的是空字符串,所以这个条件为false。 因此,整个条件`test`表达式为false(因为`and`操作符,有一个false就是false),所以这个`<if>`块不会被执行。也就是说,这个SQL部分不会添加到最终的查询中。 所以,当`commodity_name`为""时,这段SQL不会拼接任何与`commodity_name`相关的条件。 现在,我需要回答问题:这段sql会拼接成什么? 用户的问题是针对整个SQL片段的,但由于`commodity_name`为"",只有那个特定的条件不会被添加。其他条件可能被添加,取决于其他参数的值。 用户没有指定其他参数的值,所以我应该假设其他参数都是默认值或未提供,但为了准确,我应该只关注`commodity_name`部分。 用户的问题是:“如果我送的commodity_name为"",这段sql会拼接成什么?” 所以,我需要解释当`commodity_name`是空字符串时,生成的SQL是什么样子。 在MyBatis中,整个SQL片段是一个`<where>`块,它包含多个`<if>`条件。`<where>`标签会智能地处理开头的AND或OR,避免多余的AND。 对于`commodity_name`参数为""的情况,那个`<if>`块不会被执行,所以它不会出现在SQL中。 为了回答,我应该提供一个示例生成的SQL,但其他参数的值未知。我可以假设其他参数没有被提供,所以只有那些条件也不被添加。 但为了完整,我可以说:如果只有`commodity_name`被设置为"",而其他参数为null或空,那么整个`<where>`块可能为空,或者只包含其他未触发的条件。 用户指定了`commodity_name`为"",但没有说其他参数。所以,在回答中,我应该专注于`commodity_name`部分。 最佳方式是:解释当`commodity_name`为""时,那个特定条件不会被添加,并给出一个可能的SQL片段。 例如,如果其他所有参数都不满足条件(即都为null或空),那么整个`<where>`块可能不会被添加,但用户的问题是关于整个SQL的,所以我需要输出生成的SQL。 代码片段是`<sql id="ChannelFundDetailPageQueryCondition">`,它可能被包含在一个更大的SQL语句中,但用户没有提供完整查询,所以我只能讨论这个片段。 在回答中,我可以说:当`commodity_name`为""时,生成的SQL不会包含`AND instr(commodity_name, ...)`部分。 为了具体,我可以提供一个示例。 假设其他参数都不被提供(即所有`test`条件为false),那么整个`<where>`块可能为空,但`<where>`标签本身可能输出WHERE子句,如果没有条件,它可能不会输出任何东西。 在MyBatis的`<where>`标签中,它会自动处理:如果没有任何条件被添加,它不会输出WHERE关键字;如果条件被添加,它会移除开头的AND。 但在这种情况下,由于`commodity_name`为"",那个条件不被添加。 所以,在生成的SQL中,对于`commodity_name`部分,不会有任何东西添加。 现在,关于回答的结构: 1. 我必须使用中文回答问题。 2. 回答完问题后,必须在末尾提出3-5个相关问题,以"§§相关问题§§"开头,然后列出问题。 3. 相关问题必须基于用户的问题和我的回答。 首先,回答问题。 用户的问题:如果我送的commodity_name为"",这段sql会拼接成什么? 我的回答:当commodity_name为空字符串时,MyBatis的动态SQL不会添加该条件,因为test表达式检查参数不为null且不为空字符串。因此,生成的SQL不会包含AND instr(commodity_name, ...)部分。 为了更完整:整个SQL片段会根据其他参数的值而变化,但针对commodity_name,它不会添加任何条件。 现在,生成相关问题。 我需要3-5个相关问题,基于用户的问题和我的回答。 可能的思路: 1. 关于其他参数的行为:如果其他参数被设置,SQL会如何变化? 2. 关于空字符串的处理:为什么这样设计?有什么影响? 3. 关于MyBatis动态SQL的其他功能:如何优化或修改这个SQL片段? 4. 具体到instr函数:为什么使用instr而不是等于? 5. 安全性和性能考虑。 列出相关问题: 1. 如果其他参数如trans_type也被设置为空字符串,SQL会如何拼接? 2. 使用instr函数进行模糊匹配有什么优缺点? 3. 如何修改这个SQL片段以处理commodity_name为空字符串时返回所有记录的需求? 4. 在MyBatis中,除了<if>标签,还有哪些动态SQL标签可以用于条件拼接? 5. 这个SQL片段在什么情况下会导致语法错误,例如多余的AND? 确保3-5个。 现在,回答的格式: - 首先,用中文回答核心问题。 - 然后,在末尾,以"§§相关问题§§"开头,接着列出1. 2. 3. 等,不要换行分散,所以可能在一行或连续。 在示例中,是: §§相关问题§§ 1. ··· 2. ··· 3. ··· 所以,我应该输出"§§相关问题§§"然后换行,但问题中说"禁止换行分散",意思是相关问题部分不要有额外的换行,但示例中是换行列出的,所以我认为可以换行,但不要分散内容。 问题说:"禁止换行分散。" 可能意味着在相关问题内部不要换行,但列表可以有换行。 在示例中,是: §§相关问题§§ 1. ··· 2. ··· 3. ··· 所以,我认为输出"§§相关问题§§"后换行,然后列出问题编号。 现在,写回答。</think>当`commodity_name`传入空字符串(`""`)时,MyBatis的动态SQL会基于`<if>`标签的条件判断不添加该条件。具体来说,条件`test="page_query_model.params.commodity_name !=null and page_query_model.params.commodity_name !=''"`中,`commodity_name != ''`为`false`(因为传入的是空字符串),因此整个测试表达式为`false`,导致`<if>`块内的SQL片段(`AND instr(commodity_name, #{...}) > 0`)不会被拼接到最终查询中。其他参数的拼接取决于它们的值,但如果仅`commodity_name`为`""`而其他参数未设置或无效,生成的SQL不会包含此条件。例如,假设其他参数均为`null`或空,则整个`<where>`块可能为空或不输出任何内容(MyBatis的`<where>`标签会自动处理开头的`AND`)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值