servlet属性名称可以包含连字符-
吗?
因为,我尝试从Servlet的doPost
中的请求集中检索属性,但结果不是我想要的。
在我的servlet中,我有这个:
String X_USER = request.getParameter("X-User");
request.setAttribute("X-User", X_USER);
String YYYY_YYYY = request.getParameter("Y_CODE");
request.setAttribute("Y-Code", YYYY_YYYY);
在我要显示这些属性的JSP中,我这样做:
<li>${X-User}</li>
<li>${Y-Code}</li>
问题是我得到的是0而不是参数值。
您的具体问题不是HTTP请求参数,而是EL变量名称。 EL变量名称中的所有Java关键字和标识符都是非法的。
-
是Java(以及EL)中的减法运算符。 EL处理器应如何得知您是要使用文字名称X-User
还是${User}
减去${X}
的整数的结果?按规范解释为后者,它也解释了0
的数值结果。
仅使用下划线或驼峰,就像在普通Java中一样。
request.setAttribute("Y_User", X_USER);
request.setAttribute("Y_Code", Y_CODE);
${X_User}
${Y_Code}
如果绝对需要访问EL中包含连字符的请求属性,请在请求范围映射上使用大括号符号:
${requestScope['X-User']}
${requestScope['Y-User']}
顺便说一下,同样适用于请求参数,您不必将其复制到servlet的请求范围中:
${param['X-User']}
${param['Y-Code']}
您可以将jsp的隐式对象用作
response.getAttribute("X-User");
response.getAttribute("Y-Code");
当您从Servlet设置属性时,无需通过jstl来获取它。