这次项目中用Freeer框架,取Session报错.报session未定义.main.ftl中代码: <#if session.currentUser?exists>
<#include "/control/con_login1.html">
<#else>
<#include "/control/con_login.html">
</#if>con_login1.ftl中代码:<#if Session["currentUser"]?exists>
<#assign currentUser = Session["currentUser"]>
</#if><div class="dengluchenggong">
<div class="index_login" style="margin-top:0;">
<div class="index_login_top"></div>
<div class="index_login_mid">
<div class="yonghu_pic">
<div class="yh_pic">
<img
src="/huigou/images/huigou/touxiang.gif" />
</div>
<font disabled>欢迎光临会购</font>
</div>
<p>
手机号:${currentUser.mobile?if_exists}
</p>
<p>
<#if currentUser.petname?exists>
昵称:${currentUser.petname?if_exists}
<#else>
昵称: ${currentUser.username?if_exists}
</#if>
</p>
<li>
<div class="login_bottom">
<a href="/huigou/huigou/user.jsp"> <img
src="/huigou/huigou/images/gerenzhongxin.gif"
width="67" height="19" border="0" /> </a>
<a href="/huigou/loginout.jsp"><img
src="/huigou/huigou/images/gif-0545.gif"
width="57" height="18" border="0" /> </a>
</div>
</li>
</div>
<div class="index_login_bot"></div>
</div>
<div class="clr"></div>
</div>con_login中代码:
<script src="/huigou/dwr/util.js"
type="text/javascript"></script>
<script src="/huigou/dwr/engine.js"
type="text/javascript"></script>
<script src="/huigou/dwr/interface/userService.js"
type="text/javascript"></script>
<script type="text/javascript"
src="/huigou/js/huigou/reg.js"></script>
<script type="text/javascript">
<!--
function submitLoginForm(){
var username=document.getElementById("username");
var password=document.getElementById("password");
if(username.value==""){
alert("用户名不能为空!");
username.focus();
return false;
}
if(password.value==""){
alert("密码不能为空!");
password.focus();
return false;
}
userService.singleton(username.value,password.value,function(flag){
if(flag!=""){
switch(flag){
case '0':
alert("密码错误");break;
case '1':
alert("账号不存在");break;
case '-100':
alert("出错了!");break;
default:
document.getElementById("abc").innerHTML="<div class='dengluchenggong'>"
+"<div class='index_login' style='margin-top:0;'>"
+" <div class='index_login_top'></div>"
+"<div class='index_login_mid'>"
+"<div class='yonghu_pic'>"
+"<div class='yh_pic'>"
+"<img src='/huigou/images/huigou/touxiang.gif' />"
+"</div>"
+"<font disabled>欢迎光临会购</font>"
+"</div>"
+"<p>"
+"<font disabled>手机号:</font>"+flag
+"</p>"
+"<p>"
+"<font disabled>昵称:</font>"+username.value
+"</p>"
+"<li>"
+"<div class='login_bottom'>"
+"<a href='/huigou/huigou/user.jsp'> <img src='/huigou/huigou/images/gerenzhongxin.gif' width='67' height='19' border='0' /> </a>"
+" "
+"<a href='/huigou/loginout.jsp'><img src='/huigou/huigou/images/gif-0545.gif' width='57' height='18' border='0' /> </a>"
+"</div>"
+"</li>"
+"</div>"
+"<div class='index_login_bot'></div>"
+"</div>"
+"<div class='clr'></div>"
+"</div>";
}
}
})
}
//-->
</script>
<div class="index_login" id="abc">
<div class="index_login_top"></div>
<div class="index_login_mid">
<ul>
<li>
<font disabled>账号:</font>
<input type="text" name="username" size="6" id="username" />
</li>
<li>
<font disabled>密码:</font>
<input type="password" name="password" size="6" id="password" />
</li>
<li>
<div class="login_bottom">
<a href="#" onclick="submitLoginForm();">
<img
src="/huigou/huigou/images/index_denglu.gif"
width="73" height="23" border="0" /> </a>
<a
href="/huigou/c/user.shtml?method=toreg"><img
src="/huigou/huigou/images/index_zhuche.gif"
width="73" height="23" border="0" /> </a>
</div>
<font disabled> 卡用户密码"5higo.com"</font>
</li>
</ul>
</div>
<div class="index_login_bot"></div>
</div>运行时就报错:Expression Session is undefined on line 128, column 54 in main.ftl.
The problematic instruction:
----------
==> if-else [on line 128, column 49 in main.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression Session is undefined on line 128, column 54 in main.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$existsBI._getAsTemplateModel(BuiltIn.java:636)
at freeer.core.BuiltIn$existsBI.isTrue(BuiltIn.java:647)
at freeer.core.IfBlock.accept(IfBlock.java:80)
<#include "/control/con_login1.html">
<#else>
<#include "/control/con_login.html">
</#if>con_login1.ftl中代码:<#if Session["currentUser"]?exists>
<#assign currentUser = Session["currentUser"]>
</#if><div class="dengluchenggong">
<div class="index_login" style="margin-top:0;">
<div class="index_login_top"></div>
<div class="index_login_mid">
<div class="yonghu_pic">
<div class="yh_pic">
<img
src="/huigou/images/huigou/touxiang.gif" />
</div>
<font disabled>欢迎光临会购</font>
</div>
<p>
手机号:${currentUser.mobile?if_exists}
</p>
<p>
<#if currentUser.petname?exists>
昵称:${currentUser.petname?if_exists}
<#else>
昵称: ${currentUser.username?if_exists}
</#if>
</p>
<li>
<div class="login_bottom">
<a href="/huigou/huigou/user.jsp"> <img
src="/huigou/huigou/images/gerenzhongxin.gif"
width="67" height="19" border="0" /> </a>
<a href="/huigou/loginout.jsp"><img
src="/huigou/huigou/images/gif-0545.gif"
width="57" height="18" border="0" /> </a>
</div>
</li>
</div>
<div class="index_login_bot"></div>
</div>
<div class="clr"></div>
</div>con_login中代码:
<script src="/huigou/dwr/util.js"
type="text/javascript"></script>
<script src="/huigou/dwr/engine.js"
type="text/javascript"></script>
<script src="/huigou/dwr/interface/userService.js"
type="text/javascript"></script>
<script type="text/javascript"
src="/huigou/js/huigou/reg.js"></script>
<script type="text/javascript">
<!--
function submitLoginForm(){
var username=document.getElementById("username");
var password=document.getElementById("password");
if(username.value==""){
alert("用户名不能为空!");
username.focus();
return false;
}
if(password.value==""){
alert("密码不能为空!");
password.focus();
return false;
}
userService.singleton(username.value,password.value,function(flag){
if(flag!=""){
switch(flag){
case '0':
alert("密码错误");break;
case '1':
alert("账号不存在");break;
case '-100':
alert("出错了!");break;
default:
document.getElementById("abc").innerHTML="<div class='dengluchenggong'>"
+"<div class='index_login' style='margin-top:0;'>"
+" <div class='index_login_top'></div>"
+"<div class='index_login_mid'>"
+"<div class='yonghu_pic'>"
+"<div class='yh_pic'>"
+"<img src='/huigou/images/huigou/touxiang.gif' />"
+"</div>"
+"<font disabled>欢迎光临会购</font>"
+"</div>"
+"<p>"
+"<font disabled>手机号:</font>"+flag
+"</p>"
+"<p>"
+"<font disabled>昵称:</font>"+username.value
+"</p>"
+"<li>"
+"<div class='login_bottom'>"
+"<a href='/huigou/huigou/user.jsp'> <img src='/huigou/huigou/images/gerenzhongxin.gif' width='67' height='19' border='0' /> </a>"
+" "
+"<a href='/huigou/loginout.jsp'><img src='/huigou/huigou/images/gif-0545.gif' width='57' height='18' border='0' /> </a>"
+"</div>"
+"</li>"
+"</div>"
+"<div class='index_login_bot'></div>"
+"</div>"
+"<div class='clr'></div>"
+"</div>";
}
}
})
}
//-->
</script>
<div class="index_login" id="abc">
<div class="index_login_top"></div>
<div class="index_login_mid">
<ul>
<li>
<font disabled>账号:</font>
<input type="text" name="username" size="6" id="username" />
</li>
<li>
<font disabled>密码:</font>
<input type="password" name="password" size="6" id="password" />
</li>
<li>
<div class="login_bottom">
<a href="#" onclick="submitLoginForm();">
<img
src="/huigou/huigou/images/index_denglu.gif"
width="73" height="23" border="0" /> </a>
<a
href="/huigou/c/user.shtml?method=toreg"><img
src="/huigou/huigou/images/index_zhuche.gif"
width="73" height="23" border="0" /> </a>
</div>
<font disabled> 卡用户密码"5higo.com"</font>
</li>
</ul>
</div>
<div class="index_login_bot"></div>
</div>运行时就报错:Expression Session is undefined on line 128, column 54 in main.ftl.
The problematic instruction:
----------
==> if-else [on line 128, column 49 in main.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression Session is undefined on line 128, column 54 in main.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$existsBI._getAsTemplateModel(BuiltIn.java:636)
at freeer.core.BuiltIn$existsBI.isTrue(BuiltIn.java:647)
at freeer.core.IfBlock.accept(IfBlock.java:80)
以前做过一个FreeMarker的项目,session就和jsp里一样取的.因为最后拼装好还是一张jsp吧
<#else>
<#include "/control/con_login.html">
</#if>
或者说
<#if Session.currentUser?exists> <#include "/control/con_login1.html">
<#else>
<#include "/control/con_login.html">
</#if>
我都试过啦,报一样的错,都是
2010-01-18 09:41:30 [freeer.runtime]-[ERROR]
Expression Session is undefined on line 128, column 54 in main.ftl.
The problematic instruction:
----------
==> if-else [on line 128, column 49 in main.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression Session is undefined on line 128, column 54 in main.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$existsBI._getAsTemplateModel(BuiltIn.java:636)
at freeer.core.BuiltIn$existsBI.isTrue(BuiltIn.java:647)
at freeer.core.IfBlock.accept(IfBlock.java:80)
at freeer.core.Environment.visit(Environment.java:196)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:196)
at freeer.core.Environment.process(Environment.java:176)
at freeer.template.Template.process(Template.java:232)
at com.dahe.huigou.util.Freeer.makeHtml(Freeer.java:84)
at com.dahe.huigou.action.HMainAction.index(HMainAction.java:154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.dahe.huigou.util.filter.EncodingFilter.doFilter(EncodingFilter.java:93)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)Expression Session is undefined on line 128, column 54 in main.ftl.
The problematic instruction:
----------
==> if-else [on line 128, column 49 in main.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression Session is undefined on line 128, column 54 in main.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
at freeer.core.Expression
改成:
<#if session["currentUser"]?exists>
直接
<#if currentUser?exists>试试
<#if currentUser?exists>
<#include "/control/con_login1.html">
<#else>
<#include "/control/con_login.html">
</#if>
用currentUser不没有报错但在
con_login1.ftl中会报
currentUser没定义错误
<div class="dengluchenggong">
<div class="index_login" style="margin-top:0;">
<div class="index_login_top"></div>
<div class="index_login_mid">
<div class="yonghu_pic">
<div class="yh_pic">
<img
src="/huigou/images/huigou/touxiang.gif" />
</div>
<font disabled>欢迎光临会购</font>
</div>
<p>
手机号:${currentUser.mobile?if_exists}
</p>
<p>
<#if currentUser.petname?exists>
昵称:${currentUser.petname?if_exists}
<#else>
昵称: ${currentUser.username?if_exists}
</#if>
</p>
<li>
<div class="login_bottom">
<a href="/huigou/huigou/user.jsp"> <img
src="/huigou/huigou/images/gerenzhongxin.gif"
width="67" height="19" border="0" /> </a>
<a href="/huigou/loginout.jsp"><img
src="/huigou/huigou/images/gif-0545.gif"
width="57" height="18" border="0" /> </a>
</div>
</li>
</div>
<div class="index_login_bot"></div>
</div>
<div class="clr"></div>
</div>
public String singleton(String username , String password){
try{
CUser sheetRegUser = null;
List userList = this.userDAO.getByProperty("username", username);
List petlist = this.userDAO.getByProperty("petname",username );
if(userList != null && !userList.isEmpty()){
sheetRegUser = (CUser) userList.get(0);
}else if (petlist != null && !petlist.isEmpty()){
sheetRegUser = (CUser) petlist.get(0);
}else{
return "1"; //用户不存在
}
if (sheetRegUser.getPassword().equals(
new MD5().getMD5ofStr(password))) {
WebContext ctx = WebContextFactory.get();
HttpSession session = ctx.getHttpServletRequest().getSession();
if (sheetRegUser != null) {
if (sheetRegUser.getLogintimes() == null
|| "".equals(sheetRegUser.getLogintimes())) {
session.setAttribute("logintime",
ConvertTime.getTime());
}
session.setAttribute("logintime",
sheetRegUser.getLogintimes());
sheetRegUser.setLogintimes(ConvertTime.getTime());
sheetRegUser
.setOnline_status(HConstants.CEM_HMK_USER_ONLINE_STATUS_YES);
this.userDAO.save(sheetRegUser);
session.setAttribute("mobile",
sheetRegUser.getMobile());
session.setAttribute(
HConstants.SESSION_CURUSER, sheetRegUser);System.out.println("Session里放入对象........");
}
return sheetRegUser.getMobile();
}else{
return "0"; //密码错误
}
}catch(Exception e){
e.printStackTrace();
return "-100"; //登录异常
}
}
首页Action:
public ActionForward index(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
this.InitIndexFormData(request);
Freeer.makeHtml(request, "root", "r", "con_login.ftl",
"/con_login.html");
Freeer.makeHtml(request, "root", "r", "con_login1.ftl",
"/con_login1.html");//取session报错
Freeer.makeHtml(request, "root", "r", "con_right_top_guanggou.ftl",
"/con_right_top_guanggou.html");
Freeer.makeHtml(request, "main.ftl", "/main.html");
return mapping.findForward("index");
}
<div class="index_login" style="margin-top:0;">
<div class="index_login_top"></div>
<div class="index_login_mid">
<div class="yonghu_pic">
<div class="yh_pic">
<img
src="/huigou/images/huigou/touxiang.gif" />
</div>
<font disabled>欢迎光临会购</font>
</div>
<p>
手机号:${session["currentUser"].mobile?if_exists}
</p>
<p>
<#if currentUser.petname?exists>
昵称:${session["currentUser"].petname?if_exists}
<#else>
昵称: ${session["currentUser"].username?if_exists}
</#if>
</p>
<li>
<div class="login_bottom">
<a href="/huigou/huigou/user.jsp"> <img
src="/huigou/huigou/images/gerenzhongxin.gif"
width="67" height="19" border="0" /> </a>
<a href="/huigou/loginout.jsp"><img
src="/huigou/huigou/images/gif-0545.gif"
width="57" height="18" border="0" /> </a>
</div>
</li>
</div>
<div class="index_login_bot"></div>
</div>
<div class="clr"></div>
</div>
取session报错:
2010-01-18 10:30:30 [freeer.runtime]-[ERROR]
Expression session is undefined on line 14, column 39 in con_login1.ftl.
The problematic instruction:
----------
==> ${session["currentUser"].mobile?if_exists} [on line 14, column 37 in con_login1.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression session is undefined on line 14, column 39 in con_login1.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.Dot._getAsTemplateModel(Dot.java:74)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$if_existsBI._getAsTemplateModel(BuiltIn.java:677)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.Expression.getStringValue(Expression.java:93)
at freeer.core.DollarVariable.accept(DollarVariable.java:76)
at freeer.core.Environment.visit(Environment.java:196)
at freee
public ActionForward index(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
this.InitIndexFormData(request);
Freeer.makeHtml(request, HConstants.SESSION_CURUSER, request
.getSession(), "con_login.ftl", "/con_login.html");
Freeer.makeHtml(request, HConstants.SESSION_CURUSER, request
.getSession(), "con_login1.ftl", "/con_login1.html");
Freeer.makeHtml(request, "root", "r", "con_right_top_guanggou.ftl",
"/con_right_top_guanggou.html");
Freeer.makeHtml(request, "main.ftl", "/main.html");
return mapping.findForward("index");
}直接把Sessiont放进CurrentUser里Freeer.makeHtml(request, HConstants.SESSION_CURUSER, request
.getSession(), "con_login1.ftl", "/con_login1.html");
但是我现在在con_login1.ftl中取currentUser好象为空!
currentUser里面就是存放一个CUser
...............
session.setAttribute(HConstants.SESSION_CURUSER, sheetRegUser);
HConstants.SESSION_CURUSER存放currentUser;
HConstants.SESSION_CURUSER存放currentUser;
不是直接覆盖掉了么?
首页Action中Freeer.makeHtml(request, HConstants.SESSION_CURUSER, request.getSession(),
"con_login1.ftl", "/con_login1.html");
中HConstants.SESSION_CURUSER还是指向同一个currentUser;
这步怎么实现的?
/**
* 会话标识-存放普通用户登录成功的信息
*/
public final static String SESSION_CURUSER = "currentUser";
你这个currentUser是string啊,怎么可能存放CUser呢.
况且这种定义也不能直接currentUser.petname来引用.还要getAttributer的方法取得吧
CUser user = (CUser) request.getSession().getAttribute(
HConstants.SESSION_CURUSER);
把Session中数据放进数据模型中传到模板中就可以啦!
这样session就直接取出来了