0

我正在使用 SPring JS 2.3.0.RELEASE(它使用 dojo 1.6):我尝试将小部件添加到我的页面,但它从不呈现

我通过瓷砖使用页面,所以这是布局模板 shopper.jspx

<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:spring="http://www.springframework.org/tags">
<jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" />
<jsp:directive.page contentType="text/html;charset=UTF-8" />
<jsp:directive.page pageEncoding="UTF-8" />
<jsp:output omit-xml-declaration="true" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<link rel="stylesheet" type="text/css" href="/resources/dojo/resources/dojo.css"/>
<link rel="stylesheet" type="text/css" href="/resources/dijit/themes/nihilo/nihilo.css" />
<link rel="stylesheet" type="text/css" href="/resources/css/screen.css" />
<c:url var="rootUrl" value="/resources/"/>
<script type="text/javascript" djconfig="parseOnLoad: true" src="${rootUrl}dojo/dojo.js"><jsp:text></jsp:text> </script>
<script type="text/javascript" src="${rootUrl}spring/Spring.js">
  <jsp:text></jsp:text>
</script>
<script type="text/javascript" src="${rootUrl}spring/Spring-Dojo.js">
  <jsp:text></jsp:text>
</script>
<script type="text/javascript">
  dojo.require("dojo.parser"); 
</script>
<title>My Shopping</title>
</head>
<body class="nihilo">
  <tiles:insertAttribute name="header" />
  <tiles:insertAttribute name="submenu" />
  <tiles:insertAttribute name="body" />
  <tiles:insertAttribute name="footer" ignore="true" />
</body>
</html>

这是覆盖 body 属性的 home.jspx 模板

<?xml version="1.0" encoding="UTF-8" ?>
<div id="page" class="roundedCorners" xmlns:spring="http://www.springframework.org/tags" xmlns:jsp="http://java.sun.com/JSP/Page"
  xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:form="http://www.springframework.org/tags/form">
  <jsp:directive.page contentType="text/html;charset=UTF-8" />
  <jsp:output omit-xml-declaration="yes" />
  <c:url var="rootUrl" value="/resources/"/>
  <script>
        dojo.require("dijit.layout.BorderContainer");
        dojo.require("dijit.layout.TabContainer");
        dojo.require("dijit.layout.AccordionContainer");
        dojo.require("dijit.layout.ContentPane");  
        dojo.addOnLoad(function()
            {
            // create a BorderContainer as the top widget in the hierarchy
            var bc = new dijit.layout.BorderContainer({style: "height: 100%; width: 100%;"});

            // create a ContentPane as the left pane in the BorderContainer
            var cp1 = new dijit.layout.ContentPane({
               region: "left",
               style: "height: 100px",
               content: "hello world"
            });
            bc.addChild(cp1);

            // create a TabContainer as the center pane in the BorderContainer,
            // which itself contains two children
            var tc = new dijit.layout.TabContainer({region: "center"});
            var tab1 = new dijit.layout.ContentPane({title: "tab 1"}),
                tab2 = new dijit.layout.ContentPane({title: "tab 2"});
            tc.addChild( tab1 );
            tc.addChild( tab2 );
            bc.addChild(tc);

            // put the top level widget into the document, and then call startup()
            dojo.byId("inbox").addChild(bc.domNode);
            bc.startup();
        });
    </script>  
    <div id="inbox" class="panel roundedCorners">
        <div id="inboxContainer" dojo-data-type="dijit.layout.BorderContainer">
        </div>
    </div>
</div>

当我加载页面时,我没有看到任何这些小部件被渲染。浏览器控制台也显示错误:

dojo.byId("inbox").addChild is not a function
[Break On This Error]   

dojo.byId("inbox").addChild(bc.domNode);

尽管 djconfig="parseOnLoad: true"配置到位。

更新:这里是我尝试过的初始声明性语法,但无法让它工作。

shopper.jspx

<html xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:tiles="http://tiles.apache.org/tags-tiles"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:spring="http://www.springframework.org/tags">
<jsp:output doctype-root-element="HTML"
    doctype-system="about:legacy-compat" />
<jsp:directive.page contentType="text/html;charset=UTF-8" />
<jsp:directive.page pageEncoding="UTF-8" />
<jsp:output omit-xml-declaration="true" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<link rel="stylesheet"
    href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dijit/themes/nihilo/nihilo.css"
    media="screen"/>
<link rel="stylesheet" type="text/css" href="/resources/css/screen.css" />
<!-- load dojo and provide config via data attribute -->
<script
    src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"
    data-dojo-config="async: true, parseOnLoad: true">
    <jsp:text></jsp:text>
</script>
<script type="text/javascript">
        dojo.require("dojo.parser");
        dojo.require("dijit.layout.BorderContainer");
        dojo.require("dijit.layout.TabContainer");
        dojo.require("dijit.layout.AccordionContainer");
        dojo.require("dijit.layout.ContentPane");
        dojo.require("dijit.layout.AccordionPane");
</script>
<title>My Shopping</title>
</head>
<body class="nihilo">
    <tiles:insertAttribute name="header" />
    <tiles:insertAttribute name="submenu" />
    <tiles:insertAttribute name="body" />
    <tiles:insertAttribute name="footer" ignore="true" />
</body>
</html>

home.jspx我从 dojo 教程中复制的声明:

<?xml version="1.0" encoding="UTF-8" ?>
<div id="page" xmlns:spring="http://www.springframework.org/tags" xmlns:jsp="http://java.sun.com/JSP/Page"
  xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:form="http://www.springframework.org/tags/form">
  <jsp:directive.page contentType="text/html;charset=UTF-8" />
  <jsp:output omit-xml-declaration="yes" />
    <div id="inbox" data-dojo-type="dijit.layout.BorderContainer" style="width: auto; height:auto" > 
    <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">Top pane</div>
     <div data-dojo-type="dijit.layout.AccordionContainer" data-dojo-props="region:'leading'">
          <div data-dojo-type="dijit.layout.AccordionPane" title="pane #1">accordion pane #1</div>
          <div data-dojo-type="dijit.layout.AccordionPane" title="pane #2">accordion pane #2</div>
          <div data-dojo-type="dijit.layout.AccordionPane" title="pane #3">accordion pane #3</div>
     </div>
     <div data-dojo-type="dijit.layout.TabContainer" data-dojo-props="region:'center'">
          <div data-dojo-type="dijit.layout.ContentPane" title="tab #1">tab pane #1</div>
          <div data-dojo-type="dijit.layout.ContentPane" title="tab #2">tab pane #2</div>
          <div data-dojo-type="dijit.layout.ContentPane" title="tab #3">tab pane #3</div>
     </div>
     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'trailing'">Trailing pane</div>
     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'bottom'">Bottom pane</div>
    </div>
</div>

screen.css我定义了以下内容:

body {
  margin: 0;
  padding: 0;
  background-color: #EAECEE;
  font-family: Verdana, sans-serif;
  font-size: 12px;
}

#page {
  background: #ffffff;
  margin-left: auto;
  margin-right: auto;
  -moz-box-shadow: 0 0 5px 3px #999;
  -webkit-box-shadow: 0 0 5px 3px #999;
}

当我访问页面时,我没有呈现任何小部件。

修复:忽略了 dijit 如何放置 div 的事实,我删除了通过“页面”div id 应用的样式并固定高度和宽度,如下所示:

<div xmlns:spring="http://www.springframework.org/tags" xmlns:jsp="http://java.sun.com/JSP/Page"
  xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:form="http://www.springframework.org/tags/form">
  <jsp:directive.page contentType="text/html;charset=UTF-8" />
  <jsp:output omit-xml-declaration="yes" />
    <div data-dojo-type="dijit.layout.BorderContainer" style="width: auto; height:600px;" > 
4

1 回答 1

1

您正在标记中声明一个边框容器,并尝试以编程方式创建一个。

试试这个:

改变

<div id="inboxContainer" dojo-data-type="dijit.layout.BorderContainer">
</div>

<div id="inboxContainer" style="width:800px; height: 600px"></div>

创建边框容器

var bc = new dijit.layout.BorderContainer({}, dojo.byId("inboxContainer"));
...
// dojo.byId("inbox").addChild(bc.domNode); // remove this

这行代码失败,因为 dojo.byId 返回一个 domNode,而 domNode 没有 addChild 方法。

我也改变了宽度和高度。使用 height: 100% 需要层次结构中它上面的所有 dom 节点(html、body、roundedCorners、收件箱)也具有 height: 100% 并且我无法在发布的代码中验证是这种情况,所以消除这个现在通过指定直接高度来解决潜在问题。一旦,它的工作,你可以把它改回来。

于 2012-03-08T11:25:51.757 回答