当前位置: 代码迷 >> Java Web开发 >> 单选按钮组radio中value值为汉字的有关问题
  详细解决方案

单选按钮组radio中value值为汉字的有关问题

热度:52   发布时间:2016-04-16 22:17:04.0
单选按钮组radio中value值为汉字的问题
问题描述:
1.输入login.jsp为为标准的html,其中用到了两个单选按钮组userType和sex,前一个取值为英文,后一个取值为中文,并在其中用struts:if标签对这两个值进行了判断。页面的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'login.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

  </head>
  
  <body>
    <form name="form" method="post" action="loginPerson.action">
      account<input type="text" name="account" value="" /><br>
      password<input type="password" name="password" value="" /><br>
      <input type="radio" name="userType" value="examinee" checked /> 考生
      <input type="radio" name="userType" value="administrator" /> 管理员 <br>
      <input type="radio" name="sex" value="男" /> 男
      <input type="radio" name="sex" value="女" /> 女 <br>
      <input type="submit" value="submit" />
      <input type="reset" value="reset" /> 
    </form>
    
     <struts:if test="#request.sex == '男'">checked 男</struts:if> 
     <struts:if test="#request.sex == '女'">checked 女</struts:if> 
     
     <struts:if test="#request.userType == 'examinee'">checked examinee</struts:if> 
     <struts:if test="#request.userType == 'administrator'">checked administrator</struts:if>
  </body>
</html>

2.在服务器层将login.jsp发回来后,userType 的值能正确判断,但sex的值却判断不成功。

3.struts 的action代码很简单,不做任务处理,直接返回登录页面:
public class LoginAction extends ActionSupport {
private String account;
private String password;
private String userType;
private String sex;

//getter and setter省略

public String execute() {
System.out.println(userType + " , " + account  + " , " + password   + " , " + sex); 
return "login";
}
}

struts.xml配置为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="main" extends="struts-default">
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="loginPerson" class="com.bcb.action.LoginAction">
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>    

问题:两个单选按钮组userType和sex,前一个取值为英文,后一个取值为中文,取值英文的判断成功了,但取值中文的却判断失败了。这是在项目开发中遇到的问题,折腾了一天了,为了表达清楚,才做了这么一个小例子,请大家看看是什么原因?在线等答案!
------解决方案--------------------
<struts:if test="#request.sex == '男'">checked 男</struts:if> 改成
<struts:if test="#request.sex ==\"\"">checked 男</struts:if> 
------解决方案--------------------
引用:
一.试了一下c:if标签,无论是改成单引号,还是\+双引号,都能生效,那肯定是struts:if标签的问题了
<c:if test="${request.sex == '男'}"> checked 男 </c:if> 
<c:if test="${request.sex == '女'}"> checked 女 </c:if>

二.通过百度,看到struts官网有一个例子:
http://struts.apache.org/release/2.1.x/docs/why-wont-the-if-tag-evaluate-a-one-char-string.html
该例子对这个问题的初步解释:如果使用单引号的话,OGNL会误将字符串解析成字符,这跟JAVA语言的效果是一样的。
但即使这样,这几个问题还是不明:
1.在radio中,为什么英文也是单引号,却可以生效呢?OGNL会误将字符串解析成字符这种现象在遇到中文与英文时,怎么会有不同效果呢?
2.在同一个页面中,为什么下拉列表框select中,同样是汉字,用单引号却可以生效呢?

有请高人进一步解答!

其实很简单楼主你观察下就知道了,单引号就是代表字符的,那为啥你英文或一个以上的字符用单引号也会解析成字符串呢,
这不是很明显了吗,ognl的解析中如果是单引号中只有一个字符的它就认为是字符不是字符串,如果一个以上的字符的你用单引号或双引号都认为是字符串,双引号才是在任何情况下代表字符串。
  相关解决方案