主题 : 后台--核心功能--站点管理 异常
级别: 解元
UID: 77
积分:295 加为好友
威望: 0 精华: 0
主题:38 回复:91
注册时间:2009-06-08
在线时长:0
1#   发表于:2009-06-10 11:26:10  IP:60.148.*.*
Expression pagination is undefined on line 2, column 68 in WEB-INF/ftl_lib/ponyjava.com/ui/table.ftl.
The problematic instruction:
----------
==> macro table [on line 1, column 1 in WEB-INF/ftl_lib/ponyjava.com/ui/table.ftl]
 in user-directive p.table [on line 17, column 1 in WEB-INF/core_sys/website/list.html]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression pagination is undefined on line 2, column 68 in WEB-INF/ftl_lib/ponyjava.com/ui/table.ftl.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freemarker.core.Macro$Context.sanityCheck(Macro.java:218)
at freemarker.core.Macro$Context.runMacro(Macro.java:165)
at freemarker.core.Environment.visit(Environment.java:602)
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
at freemarker.core.Environment.visit(Environment.java:209)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:209)
at freemarker.core.Environment.process(Environment.java:189)
at freemarker.template.Template.process(Template.java:237)
at org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:187)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.ponyjava.common.struts2.interceptor.DomainNameInterceptor.doIntercept(DomainNameInterceptor.java:24)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.core.web.AccessControlFilter.doFilter(AccessControlFilter.java:71)
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:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ponyjava.common.struts2.AjaxEncoderFilter.doFilter(AjaxEncoderFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
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:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:818)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
2009-6-10 11:22:32 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:406)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.core.web.AccessControlFilter.doFilter(AccessControlFilter.java:71)
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:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ponyjava.common.struts2.AjaxEncoderFilter.doFilter(AjaxEncoderFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
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:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:818)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)

table.ftl代码:
<#macro table cols normalOperate=[] batchOperate=[] wholeOptName="" wholeOptAction="" keepParams=[] gotoPageAction="Com_list"
  actionSuffix=".do" keyId="id" batchId="ids" wholeId="wids" value=pagination isPagination=true rowIndex=true operateCol="操作"
  width="100%" closeSonWindow="0">
<script language="javascript">
  <#list normalOperate as operate>
var ${operate["action"]} = {action:"${operate["action"]+actionSuffix}"<#if operate['confirm']??>,msg:"${operate['confirm']}"</#if>};
  </#list>
function _gotoPage(pageNo) {
try{
var tableForm = document.getElementById('tableForm');
tableForm.pageNo.value = pageNo;
<#if gotoPageAction!="">
tableForm.action="${gotoPageAction + actionSuffix}";
</#if>
tableForm.onsubmit=null;
tableForm.submit();
} catch(e) {
alert('gotoPage(pageNo)方法出错或不存在');
}
}
function _operate(op,id) {
if(op.msg && !confirm(op.msg)) {
return;
}
var tableForm = document.getElementById('tableForm');
tableForm.onsubmit=null;
tableForm.action=op.action;
tableForm.${keyId}.value = id;
tableForm.submit();
}
function _validateBatch() {
var batchChecks = document.getElementsByName('${batchId}');
var hasChecked = false;
for(var i=0; i<batchChecks.length; i++) {
if(batchChecks[i].checked) {
hasChecked = true;
break;
}
}
//选择完所属部门时,关闭当前窗口
if(${closeSonWindow}=="1"){
var idsJoin = "^";
for(var i=0; i<batchChecks.length; i++) {
if(batchChecks[i].checked) {
idsJoin = idsJoin + batchChecks[i].value + "^";
}
}
try{
opener.document.getElementById("rtnVillages").value = idsJoin;
}catch(e){
}
window.close();
return;
}
if(!hasChecked) {alert('请选择要操作的数据!')};
return hasChecked;
}
</script>
<form id="tableForm" method="post" onsubmit="return _validateBatch();">
<table class="pn-ltable" width="${width}" cellspacing="1" cellpadding="0" border="0">
<thead class="pn-lthead">
<tr>
<#if batchOperate?size gt 0>
<th width="20px"><input type="checkbox" id="allCheck" value="checkbox" onclick="Pn.checkBox('${batchId}',this.checked);"/></th>
</#if>
<#if rowIndex>
<th width="20px">#</th>
</#if>
<#list cols as col>
<th>${col["label"]}</th>
</#list>
<#if normalOperate?size != 0>
<th>${operateCol}</th>
</#if>
</tr>
</thead>
<tbody class="pn-ltbody">
<#if isPagination>
<#if value.list??>
<#assign pageList=value.list>
</#if>
<#else>
  <#assign pageList=value>
</#if>
<#if pageList?? && pageList?size gt 0>
<#list pageList as row>
<tr onmouseover="Pn.LTable.lineOver(this);" onmouseout="Pn.LTable.lineOut(this);" onclick="Pn.LTable.lineSelect(this);">
<#if batchOperate?size gt 0>
<td><input type="checkbox" name="${batchId}" value="${row[keyId]}"/></td>
</#if>
<#if rowIndex>
<td>${row_index+1}</td>
</#if>
<#list cols as col>
<td<#if col['width']??> width="${col['width']}"</#if><#if col['title']??> title="${(col['title']?eval)!}"</#if>><#rt/>
<#if col['length']??><div style="width:${col['length']}px;overflow-x:hidden;word-break:keep-all;text-overflow:ellipsis;" title="${(col['name']?eval)!?html}"></#if><#t/>
<#if col['type']?? && col['type']=='input'>
<input type="text" name="${col['inputName']}" value="${(col['name']?eval)!}" size="${col['size']!7}" onfocus="this.select();" onkeypress="if(event.keyCode==13){this.blur();return false;}"/><#t/>
<#else>
<#if (col['name']?eval)??><#if col['escape']!true>${(col['name']?eval)!?html}<#else>${(col['name']?eval)!}</#if><#else>${col['default']!}</#if><#t/>
</#if>
<#if col['length']??></div></#if><#t/>
</td><#lt/>
</#list>
<td class="pn-lopt"><#rt/>
<#if wholeOptName!=""><input type="hidden" name="${wholeId}" value="${row[keyId]}"/></#if><#t/>
<#list normalOperate as operate>
<#local opDisabled = operate['displayExp']?? && !operate['displayExp']?eval />
<@p.operateRight operate=operate['action']><a<#if opDisabled> disabled="disabled" style="background-color:#CCCCCC;"<#else> href="javascript:_operate(${operate['action']},'${row[keyId]}');"</#if> class="pn-loperator">${operate["name"]}</a><#if operate_has_next>┆</#if></@p.operateRight><#t/>
</#list><#t/>
</td><#lt/>
</tr>
</#list>
</#if>
</tbody>
</table>
<#if !pageList?? || pageList?size <= 0>
<div class="pn-lnoresult">没有相关数据!</div>
<#else>
<input type="hidden" name="${keyId}"/>
<@p.hidden name="pageNo" />
<#list keepParams as keep>
<@p.hidden name="${keep}" />
</#list>
<#list Parameters?keys as pkey>
  <#if pkey!=keyId && pkey!=batchId && !keepParams?seq_contains(pkey) && pkey?starts_with('query')>
    <@p.hidden name="${pkey}" />
  </#if>
</#list>
<#if isPagination>
<div class="pn-sp">
<div class="pn-sp-left">共 ${value.totalCount} 条 &nbsp;每页
<input type="text" value="${value.pageSize}" size="2" onfocus="this.select();" onblur="new Pn.Cookie().set(Pn.Cookie.countPerPage,this.value,10*365*24*60*60);" onkeypress="if(event.keyCode==13){$(this).blur();return false;}"/> 条</div>
<div class="pn-sp-right">
<input type="button" value="首 页" onclick="_gotoPage('1');"<#if value.firstPage> disabled="disabled"</#if>/>&nbsp;
<input type="button" value="上一页" onclick="_gotoPage('${value.prePage}');"<#if value.firstPage> disabled="disabled"</#if>/>&nbsp;
<input type="button" value="下一页" onclick="_gotoPage('${value.nextPage}');"<#if value.lastPage> disabled="disabled"</#if>/>&nbsp;
<input type="button" value="尾 页" onclick="_gotoPage('${value.totalPage}');"<#if value.lastPage> disabled="disabled"</#if>/> &nbsp;
当前 ${value.pageNo}/${value.totalPage} 页 &nbsp;转到第 <input type="text" id="_goPs" size="2" onfocus="this.select();" onkeypress="if(event.keyCode==13){$('#_goPage').click();return false;}"/> 页
<input id="_goPage" type="button" value="转" onclick="_gotoPage($('#_goPs').val());"<#if value.totalPage==1> disabled="disabled"</#if>/>
</div>
<div class="clear"></div>
</div>
</#if>
<#include "table-batchoperate.ftl" />
</#if>
</form>
</#macro>
级别: 解元
UID: 77
积分:295 加为好友
威望: 0 精华: 0
主题:38 回复:91
注册时间:2009-06-08
在线时长:0
2#   发表于:2009-06-10 11:38:07  IP:60.148.*.*
这里的pagination这个分页的list对象是在何时产生的?action中出现了list参数获取到了website的list,是如何转化为pagination的?我的数据库中只有一个website,并且action里也得到了size为1的list,请问可能的问题会出在哪里?
级别: 解元
UID: 77
积分:295 加为好友
威望: 0 精华: 0
主题:38 回复:91
注册时间:2009-06-08
在线时长:0
3#   发表于:2009-06-10 11:42:29  IP:60.148.*.*
即list是何时被放入pagination的?
级别: 白丁
UID: 31
积分:209 加为好友
威望: 0 精华: 0
主题:2 回复:167
注册时间:2009-06-03
在线时长:0
4#   发表于:2009-06-10 14:19:41  IP:59.134.*.*
Pagination是分页对象
其中属性list用于存放从数据库中读取的数据
Dao提供了一些方法,可以返回Pagination对象
也就是说list属性通常是在Dao操作时放入Pagination的。
1 共1页