一下是jsp页面输出的信息:
请高手指教啊。freeer 不太懂。
FreeMarker template error!Expression org.userObject is undefined on line 102, column 29 in base/views/org/orgInfoMain.ftl.
The problematic instruction:
----------
==> ${org.userObject.users?size} escaped ${org.userObject.users?size?if_exists} [on line 102, column 27 in base/views/org/orgInfoMain.ftl]
----------Java backtrace for programmers:
----------
freeer.core.InvalidReferenceException: Expression org.userObject is undefined on line 102, column 29 in base/views/org/orgInfoMain.ftl.
at freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freeer.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
at freeer.core.Dot._getAsTemplateModel(Dot.java:78)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$sizeBI._getAsTemplateModel(BuiltIn.java:615)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.BuiltIn$if_existsBI._getAsTemplateModel(BuiltIn.java:674)
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 freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:196)
at freeer.core.IfBlock.accept(IfBlock.java:82)
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.IteratorBlock$Context.runLoop(IteratorBlock.java:160)
at freeer.core.Environment.visit(Environment.java:351)
at freeer.core.IteratorBlock.accept(IteratorBlock.java:95)
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.EscapeBlock.accept(EscapeBlock.java:84)
at freeer.core.Environment.visit(Environment.java:196)
at freeer.core.Environment.process(Environment.java:176)
at freeer.template.Template.process(Template.java:231)
at com.opensymphony.webwork.views.freeer.FreeerResult.doExecute(FreeerResult.java:77)
at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:109)
at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:258)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.TimerInterceptor.intercept(TimerInterceptor.java:78)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.chinaspis.base.filters.SetProductCodeFilter.doFilter(SetProductCodeFilter.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
at java.lang.Thread.run(Unknown Source)

解决方案 »

  1.   

    Expression org.userObject is undefined on line 102, column 29 in base/views/org/orgInfoMain.ftlorg.userObject 表达示没有被找到,,
      

  2.   

    这种错误一般是struts2的标签没有用对 贴出你的代码 标签那里
      

  3.   

    这是ftl的内容:
    <#list treeIterator as org><#if !(org.parent?exists)>
    <script language="JavaScript">
    myObject = new Object();
    myObject.leaf=${org.leaf?string};

    myObject.top=0;
    myObject.bottum=0;

    myObject.userSize=${org.userObject.users?size}; 这地方的错误,说是userObject 没定义
    myObject.projectSize=${org.userObject.projects?size};

    mTreeData.addTreeNode('c${org.userObject.id}','0',
                        new Array("${org.userObject.name}",
    <#if (org.userObject.userSize>0)>
    "<span title='�� �� ֯:${org.userObject.users?size}��\r\n������֯:${org.userObject.userSize-org.userObject.users?size}��'>${org.userObject.userSize}��</span>",
    <#else>
    "&nbsp;",
    </#if>
    <#if (org.userObject.projectSize>0)>
    "<span title='�� �� ֯:${org.userObject.projects?size}��\r\n������֯:${org.userObject.projectSize-org.userObject.projects?size}��'>${org.userObject.projectSize}��</span>"
    <#else>
    "&nbsp;"
    </#if>
                        ),
                         'parent.org_editFrame.location="loadOrg.action?organization.id=${org.userObject.id}"', true, 
                         "", "folder_closed.gif", lStyleArr, myObject);
    </script><#else> <script language="JavaScript">
    myObject = new Object();
    myObject.leaf=${org.leaf?string};
    <#if (org.previousSibling?exists)>
    myObject.top=${org.previousSibling.userObject.id};
    <#else>
    myObject.top=0;
    </#if>

    <#if (org.nextSibling?exists)>
    myObject.bottum=${org.nextSibling.userObject.id};
    <#else>
    myObject.bottum=0;
    </#if>

    myObject.userSize=${org.userObject.users?size};
    myObject.projectSize=${org.userObject.projects?size};
    mTreeData.addTreeNode('c${org.userObject.id}','c${org.parent.userObject.id}',
                        new Array("${org.userObject.name}",
    <#if (org.userObject.userSize>0)>
    "<span title='����֯:${org.userObject.users?size}��\r\n������֯:${org.userObject.userSize-org.userObject.users?size}��'>${org.userObject.userSize}��</span>",
    <#else>
    "&nbsp;",
    </#if>
    <#if (org.userObject.projectSize>0)>
    "<span title='����֯:${org.userObject.projects?size}��\r\n������֯:${org.userObject.projectSize-org.userObject.projects?size}��'>${org.userObject.projectSize}��</span>"
    <#else>
    "&nbsp;"
    </#if>
    ),
                        'parent.org_editFrame.location="loadOrg.action?organization.id=${org.userObject.id}"', true,
                         "", "folder_closed.gif", lStyleArr, myObject);
    </script></#if>
    </#list>
    </HEAD>
    <BODY leftmargin="2" topmargin="5" class="contentbodymargin">
    <SCRIPT>
    var stPad = new StickPad();
    function copyFtItems(){
    var cts = tabledivMain;
    stPad.addItem(tabledivMain); stPad.copy();
    stPad.clearAll();
    alert("�����ɹ�!");
    } var sMenu = new Menu("menu140");
    //��ʼ������������<body></body>��
    function initMenuT(){
    sMenu.registerToDoc(sMenu);
    var item = new MenuItem("../../images/tb-add.gif","�½�������֯","newOrg()",1,"JTreeNode","checkSelected");
    sMenu.addItem(item);
    item = new MenuItem("../../images/tb-change.gif","�޸���֯","modifyOrg()",1,"JTreeNode","checkSelected");
    sMenu.addItem(item);

    item = new MenuItem("../../images/tb-delete3.gif","ɾ����֯","deleteOrg()",1,"JTreeNode","checkDelete");
    sMenu.addItem(item);
    sMenu.addLine();

    item = new MenuItem("../../images/move-up.gif","����","moveUp()",1,"JTreeNode","checkMoveUp");
    sMenu.addItem(item);
    item = new MenuItem("../../images/move-down.gif","����","moveDown()",1,"JTreeNode","checkMoveDown");
    sMenu.addItem(item);
    item = new MenuItem("../../images/move.gif","�ƶ���...","moveOther()",1,"JTreeNode","checkMoveOther");
    sMenu.addItem(item);
    sMenu.addLine();
    item = new MenuItem("../../images/excel.gif","���Excel�ļ�","exportExcelData()",1,"JTreeNode","");
    sMenu.addItem(item);
    item = new MenuItem("../../images/copy.gif","�����б�","copyFtItems();",1,"JTreeNode","");
    sMenu.addItem(item); item = new MenuItem("../../images/tb-print16.gif","��ӡ","window.focus();window.print();",1,"JTreeNode","");
    sMenu.addItem(item);

    sMenu.addShowType("JTreeNode");
    sMenu.addShowType("body");
    }
    </SCRIPT><div id="contentborder" >
    <table><tr>
    <td>
    <div id="divMain" oncontextmenu="return ( mTree.OnMenuShow());"  style="overflow :auto;behavior:url(../../common/JTableTree.htc)" onclick="return ( mTree.OnClick());"
       onclicknode = "ClickNode();"
       onclickplusminus = "ClickPlusMinus();"
       onshownode = "shownode(true);"
       onresizeend= ""
       onhidenode = "shownode(false);"
    >
    </div>
    </td>
    </tr>
    </table>
    <@panes.topPanes/>
    <SCRIPT> var moveUpNO=0;
    var moveDownNO=1;
    var moveOtherNO=2;
    var deleteNodeNO=3;

    function checkMove(mType,type){
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
        return false;
        }
    if(type=="enabled"){
            if(sNode.fid=='0') {
                return false;
            }
    switch (mType){
    case moveUpNO:
    if(sNode.others.top==0) {
                return false;
            }
            break;
    case moveDownNO:
    if(sNode.others.bottum==0) {
                return false;
            }
            break;
    case deleteNodeNO:
    if((!sNode.others.leaf) || sNode.others.userSize>0 || sNode.others.projectSize>0){
                return false;
    }
    break;
    case moveOtherNO:
            break;


    }
    }
    return true;
    }

    function checkMoveUp(type,ids,names){
    return checkMove(moveUpNO,type);
    }
    function checkMoveDown(type,ids,names){
    return checkMove(moveDownNO,type);
    }
    function checkMoveOther(type,ids,names){
    return checkMove(moveOtherNO,type);
    }
    function checkDelete(type,ids,names){
    return checkMove(deleteNodeNO,type);
    }
    function exportExcelData(){
        perspectiveWorkArea.location="exportExcelData.action";
    } function newOrg() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ���ϼ���֯��");
            return;
        }     parent.org_editFrame.location="addOrg.action?parentOrg.id="+sNode.id.substring(1);
    }
    function modifyOrg() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ��һ����֯��");
            return;
        }

        parent.org_editFrame.location="addOrg.action?organization.id="+sNode.id.substring(1);
        
    }
    function deleteOrg() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ��һ����֯��");
            return;
        }
        if(confirm("ȷ��Ҫɾ��"+sNode.TextArray[0]+"����")){
         perspectiveWorkArea.location="deleteOrg.action?organization.id="+sNode.id.substring(1);
        }
    }
    function moveUp() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ��һ����֯��");
            return;
        }
        perspectiveWorkArea.location="moveUp.action?organization.id="+sNode.id.substring(1);
    }
    function moveDown() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ��һ����֯��");
            return;
        }
        perspectiveWorkArea.location="moveDown.action?organization.id="+sNode.id.substring(1);
    }
    var moveNodeId = "";
    function moveOther() {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
            alert("��ѡ��һ����֯��");
            return;
        }
        var sParentNode = mTree.GetTreeNode(sNode.fid );
        moveNodeId = sNode.id.substring(1);
        link("selectOrg.action?organization.id="+sNode.id.substring(1)+"&parentOrg.id="+sParentNode.id.substring(1),500,400); }
    function selectedFolder(selectId){
        if(moveNodeId==""){
         alert("û����Ҫ�ƶ�����֯!");
        return;
        }
        perspectiveWorkArea.location="moveOther.action?organization.id="+moveNodeId+"&parentOrg.id="+selectId;
    moveNodeId="";
    }


    function checkSelected(type,ids,names) {
        var sNode = mTree.GetTreeNode(mTree.mSelected );
        if (sNode == null) {
        return false;
        }
        return true;
    }
    </SCRIPT>
    </div>
    </BODY>
    </HTML>
    </#escape>