Example: Standard jQuery drag-and-drop
출처 : http://wwwendt.de/tech/dynatree/doc/samples.html
This sample uses the standard jQuery draggable and droppable.
|
This tree allows dragging. |
This tree allows dropping. |
|---|---|
|
Active node: - |
Active node: Sub-item 2.1.1(_4) |
jquery.dynatree.js project home Link to this page Example Browser Hide source code
Dynatree DEVELOPMENT, jQuery UI 1.8.24, jQuery 1.8.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Dynatree - Example</title>
<!--
<script src="../jquery/jquery.cookie.js" type="text/javascript"></script>
<script src="../jquery/jquery.js" type="text/javascript"></script>
<script src="../jquery/jquery-ui.custom.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js" type="text/javascript"></script>
-->
<script src="../jquery/jquery.cookie.js" type="text/javascript"></script>
<script src="../jquery/jquery.js" type="text/javascript"></script>
<script src="../jquery/jquery-ui.custom.js" type="text/javascript"></script>
<link href="../src/skin/ui.dynatree.css" rel="stylesheet" type="text/css" id="skinSheet">
<script src="../src/jquery.dynatree.js" type="text/javascript"></script>
<style type="text/css">
#draggableSample, #droppableSample {
height:100px;
padding:0.5em;
width:150px;
border:1px solid #AAAAAA;
}
#draggableSample {
background-color: silver;
color:#222222;
}
#droppableSample {
background-color: maroon;
color: white;
}
#droppableSample.drophover {
border: 1px solid green;
}
</style>
<!-- (Irrelevant source removed.) -->
<script type="text/javascript"><!--
$(function(){
// --- Initialize first Dynatree -------------------------------------------
$("#tree").dynatree({
initAjax: {
url: "sample-data3.json"
},
onLazyRead: function(node){
// Mockup a slow reqeuest ...
node.appendAjax({
url: "sample-data2.json",
debugLazyDelay: 750 // don't do thi in production code
});
},
onActivate: function(node) {
$("#echoActive").text(node.data.title + "(" + node.data.key + ")");
},
onDeactivate: function(node) {
$("#echoActive").text("-");
},
dnd: {
revert: false, // true: slide helper back to source if drop is rejected
onDragStart: function(node) {
/** This function MUST be defined to enable dragging for the tree.
* Return false to cancel dragging of node.
*/
logMsg("tree.onDragStart(%o)", node);
if(node.data.isFolder){
return false;
}
return true;
},
onDragStop: function(node) {
logMsg("tree.onDragStop(%o)", node);
}
}
});
// --- Initialize second Dynatree ------------------------------------------
$("#tree2").dynatree({
initAjax: {
url: "sample-data3.json"
},
onLazyRead: function(node){
// Mockup a slow reqeuest ...
node.appendAjax({
url: "sample-data2.json",
debugLazyDelay: 750 // don't do thi in production code
});
},
onActivate: function(node) {
$("#echoActive2").text(node.data.title + "(" + node.data.key + ")");
},
onDeactivate: function(node) {
$("#echoActive2").text("-");
},
onLazyRead: function(node){
node.appendAjax({
url: "sample-data2.json"
});
},
dnd: {
autoExpandMS: 1000,
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
onDragEnter: function(node, sourceNode) {
/* sourceNode may be null for non-dynatree droppables.
* Return false to disallow dropping on node. In this case
* onDragOver and onDragLeave are not called.
* Return 'over', 'before, or 'after' to force a hitMode.
* Any other return value will calc the hitMode from the cursor position.
*/
logMsg("tree.onDragEnter(%o, %o)", node, sourceNode);
// For the sake of this example deny dropping over folders
if(node.data.isFolder){
return false;
}
return true;
// return "over";
},
onDragOver: function(node, sourceNode, hitMode) {
/* Return false to disallow dropping this node.*/
// if(node.data.isFolder){
// var dd = $.ui.ddmanager.current;
// dd.cancel();
// alert("folder");
// }
logMsg("tree.onDragOver(%o, %o, %o)", node, sourceNode, hitMode);
},
onDrop: function(node, sourceNode, hitMode, ui, draggable) {
/* This function MUST be defined to enable dropping of items on the tree.
* sourceNode may be null, if it is a non-Dynatree droppable.
*/
logMsg("tree.onDrop(%o, %o)", node, sourceNode);
var copynode;
if(sourceNode) {
copynode = sourceNode.toDict(true, function(dict){
dict.title = "Copy of " + dict.title;
delete dict.key; // Remove key, so a new one will be created
});
}else{
copynode = {title: "This node was dropped here (" + ui.helper + ")."};
}
if(hitMode == "over"){
// Append as child node
node.addChild(copynode);
// expand the drop target
node.expand(true);
}else if(hitMode == "before"){
// Add before this, i.e. as child of current parent
node.parent.addChild(copynode, node);
}else if(hitMode == "after"){
// Add after this, i.e. as child of current parent
node.parent.addChild(copynode, node.getNextSibling());
}
},
onDragLeave: function(node, sourceNode) {
/** Always called if onDragEnter was called.
*/
logMsg("tree.onDragLeave(%o, %o)", node, sourceNode);
}
}
});
// --- Initialize simple draggable sample ----------------------------------
$("#draggableSample").draggable({
// revert: "invalid", // slide back, when dropping over non-target
revert: function(dropped){
// Return `true` to let the helper slide back.
if(typeof dropped === "boolean"){
// dropped == true, when dropped over a simple, valid droppable target.
// false, when dropped outside a drop target.
return !dropped;
}
// Drop comes from another tree. Default behavior is to assume
// a valid drop, since we are over a drop-target.
// Therefore we have to make an extra check, if the target node
// was rejected by a Dynatree callback.
var helper = $.ui.ddmanager && $.ui.ddmanager.current && $.ui.ddmanager.current.helper;
var isRejected = helper && helper.hasClass("dynatree-drop-reject");
return isRejected;
},
connectToDynatree: true,
cursorAt: { top: -5, left:-5 },
helper: "clone"
});
// --- Initialize simple droppable sample ----------------------------------
$("#droppableSample").droppable({
hoverClass: "drophover",
addClasses: true,
// tolerance: "pointer",
over: function(event, ui) {
logMsg("droppable.over, %o, %o", event, ui);
},
drop: function(event, ui) {
var source = ui.helper.data("dtSourceNode") || ui.draggable;
$(this).addClass("ui-state-highlight").find("p").html("Dropped " + source);
// alert("dropped");
}
});
<!-- (Irrelevant source removed.) -->
});
--></script>
</head>
<body class="example">
<h1>Example: Standard jQuery drag-and-drop</h1>
<p class="description">
This sample uses the standard jQuery draggable and droppable.
</p>
<div>
Skin:
<select id="skinCombo" size="1">
<option value="skin">Standard ('/skin/')</option>
<option value="skin-vista">Vista ('/skin-vista/')</option>
</select>
</div>
<table>
<thead>
<tr>
<th>
<p>This tree allows dragging.</p>
</th>
<th>
<p>This tree allows dropping.</p>
</th>
</tr>
</thead>
<tbody>
<tr valign="top">
<td>
<div id="tree"> </div>
</td>
<td>
<div id="tree2"></div>
</td>
</tr>
<tr>
<td>
<div>Active node: <span id="echoActive">-</span></div>
</td>
<td>
<div>Active node: <span id="echoActive2">-</span></div>
</td>
</tr>
<tr>
<td>
<div id="draggableSample" class="ui-widget-content">
<p>Drag me around</p>
</div>
</td>
<td>
<div id="droppableSample" class="ui-widget-content">
<p>Drop something here</p>
</div>
</td>
</tr>
</tbody>
</table>
<!-- (Irrelevant source removed.) -->
</body>
</html>
|
menuCd |
highMenuCd |
menuNm |
orderNo |
|
|
1001 |
0 |
고객 |
1 | |
|
1002 |
1001 |
고객리스트 |
2 | |
| 1003 | 1002 | 대기리스트 | 3 | |
| 1004 | 0 | 게시판 | 4 | |
| 1005 | 1004 | 자유게시판 | 5 | |
| 1006 | 1004 | 유머게시판 | 6 |
위와 같은 형식의 데이터를 DB에서 뽑아 냈을때 오른쪽과 같이 화면에 표현하고 싶었다.
우선 Tree는 jQuery기반의 드래그앤랍이 기능이 되는 "jquery.dynatree.js" 를 선택했다.
이제 위 2차원 배열형태의 데이터를 dynatree가 요구하는 데이터형태로 변환을 해야 한다.
요구하는 데이터형태는 트리형식으로 아래와 같은 스타일로 만들어주면 된다.
[
{"isFolder":"true","title":"고객","children":[
{"isFolder":"true","title":"고객리스트" }
...
]
....
]
위와 같은 형태로 만들려고 삽질 좀 하다가 javascript 기반으로 잘 만들어져있는 소스를 구글링을통해 발견하여 그것을 java기반으로 수정 하였습니다.
(http://programmingsummaries.tistory.com/250)
package com.ezwel.welfare.core.util;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * JSON관련 가공에 필요한 함수들 * @auther ddakker 2013. 12. 12. */public class JsonUtil { private static final Log log = LogFactory.getLog(JsonUtil.class); /** * 2차원 배열의 부모/자식 관계의 데이터를 트리형식으로 재나열 한다. * @param list 2차원 배열 * @param rootId 최상위 id * @param idKey 유니크한 키(id가 될 필드명) * @param pIdKey 부모키(pId가 될 필드명) * @param titleKey 메뉴명이 표시될 필드명 * @return * @auther ddakker 2013. 12. 12. */ public static List<Map<String, Object>> convertorTreeMap(final List<Map<String, Object>> list, String rootId, final String idKey, final String pIdKey, final String titleKey){ return convertorTreeMap(list, rootId, idKey, pIdKey, titleKey, null); } /** * 2차원 배열의 부모/자식 관계의 데이터를 트리형식으로 재나열 한다. * @param list 2차원 배열 * @param rootId 최상위 id * @param idKey 유니크한 키(id가 될 필드명) * @param pIdKey 부모키(pId가 될 필드명) * @param titleKey 메뉴명이 표시될 필드명 * @param orderKey 정렬이 필요한경우 정령 필드명 * @return * @auther ddakker 2013. 12. 12. */ public static List<Map<String, Object>> convertorTreeMap(List inList, String rootId, final String idKey, final String pIdKey, final String titleKey, final String orderKey){ List<Map<String, Object>> treeList = new ArrayList<Map<String,Object>>(); // 최종 트리 if( inList == null || inList.size() == 0 ) throw new RuntimeException("List<Map> 데이터가 없습니다."); if( inList.get(0) == null ) throw new RuntimeException("Map 데이터가 없습니다."); final List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); // 원본데이터(Bean일경우 Map으로 변환) Iterator iter; for( iter=inList.iterator(); iter.hasNext(); ) { try{ Object obj = iter.next(); if( obj instanceof Map ) { list.add((Map<String, Object>) obj); }else{ list.add((Map<String, Object>) BeanUtils.describe(obj)); } }catch (Exception e) { throw new RuntimeException("Collection -> List<Map> 으로 변환 중 실패: " + e); } } int listLength = list.size(); int loopLength = 0; final int[] treeLength = new int[] { 0 }; while ( treeLength[0] != listLength && listLength != loopLength++ ) { for ( int i=0; i<list.size(); i++ ) { Map<String, Object> item = list.get(i); if ( rootId.equals((String)item.get(pIdKey)) ) { Map<String, Object> view = new HashMap<String, Object>(item); view.put("title", item.get(titleKey)); view.put("children", new ArrayList<Map<String,Object>>()); treeList.add(view); list.remove(i); treeLength[0]++; if( orderKey != null ){ Collections.sort(treeList, new Comparator<Map<String, Object>>(){ public int compare(Map<String, Object> arg0, Map<String, Object> arg1) { // TODO Auto-generated method stub return ((String)arg0.get(orderKey)).compareTo((String)arg1.get(orderKey)); } }); } view.put("isFolder", "true"); break; }else{ new InnerClass(){ public void getParentNode(List<Map<String, Object>> children, Map<String, Object> item ) { for ( int i=0; i<children.size(); i++ ) { Map<String, Object> child = children.get(i); if ( child.get(idKey).equals(item.get(pIdKey)) ) { Map<String, Object> view = new HashMap<String, Object>(item); view.put("title", item.get(titleKey)); view.put("children", new ArrayList<Map<String,Object>>()); ((List<Map<String,Object>>) child.get("children")).add(view); treeLength[0]++; list.remove(list.indexOf(item)); view.put("isFolder", "true"); if( orderKey != null ){ Collections.sort(((List<Map<String,Object>>) child.get("children")), new Comparator<Map<String, Object>>(){ public int compare(Map<String, Object> arg0, Map<String, Object> arg1) { // TODO Auto-generated method stub return ((String)arg0.get(orderKey)).compareTo((String)arg1.get(orderKey)); } }); } break; }else{ if( ((List<Map<String,Object>>) child.get("children")).size() > 0 ){ getParentNode((List<Map<String,Object>>) child.get("children"), item); } } } } }.getParentNode(treeList, item); } } } return treeList; } public interface InnerClass { public void getParentNode(List<Map<String, Object>> list, Map<String, Object> item ); } }spring 3.2 No setter found for property 'cronExpression' in class
Quartz Scheduler 2.x 적용 중 다음과 같은 오류 발생
spring 3.2 No setter found for property 'cronExpression' in class
해결
spring reference에 나와있는 CronTriggerBean 대신 CronTriggerFactoryBean class를 사용함
|
1
2
3
4
5 |
<bean class="org.springframework.scheduling.quartz.CronTriggerBean" id="cronTrigger"><property ref="exampleJob" name="jobDetail"><!-- run every morning at 6 AM --><property name="cronExpression" value="0 0 6 * * ?"></property></property></bean> |
대신에 아래와 같이 CronTriggerFactoryBean을 사용함.
|
1
2
3
4
5 |
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="cronTrigger"><property ref="exampleJob" name="jobDetail"><!-- run every morning at 6 AM --><property name="cronExpression" value="0 0 6 * * ?"></property></property></bean> |
참고
If You are using Spring 3.x & Quartz 2.1.x…
Then do only two changes IN YOUR configuration file 1st : for Simple Trigger
Use class=”org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”> instead of class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>
2nd : for Cron Trigger useclass=”org.springframework.scheduling.quartz.CronTriggerFactoryBean” instead ofclass=”org.springframework.scheduling.quartz.CronTriggerBean”
출처 :http://shuiky.tistory.com/728
Eclipse에서 javadoc 생성을 하려는데
아래와 같은 에러가 났습니다.
코드의 주석에 한글(UTF-8로 인코딩된)을 써서 그런 것 같아 구글링 해봤더니 역시나 그 문제 였네요.
해결 방법은 아래 창이 나타났을 때
VM options에
을 적어주면 해결 됩니다.
그러면 한글이 포함된 JavaDoc을 생성할 수 있습니다.
출처 : http://kkoseul.tistory.com/154
http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html
Example: Standard jQuery drag-and-drop
This sample uses the standard jQuery draggable and droppable.
This tree allows dragging. | This tree allows dropping. |
|---|---|
| Active node: - | Active node: - |
Link to this page View source code
Dynatree DEVELOPMENT, jQuery UI 1.8.24, jQuery 1.8.2
Dynatree documentation
Document revision: $Revision:$.
A current version may be found at the project site http://wwwendt.de/tech/dynatree/index.html.
Dynatree is a dynamic JavaScript tree view control with support for checkboxes, drag'n'drop, and lazy loading.
Main features:
- Open source (MIT and GPL License)
- Optimized for large dynamic trees (DOM elements are only created when really needed).
- Programmable through a rich object oriented interface.
- Support for lazy loading and Ajax.
- Checkboxes and hierarchical selection.
- Supports drag and drop.
- Support for persistence.
- Keyboard aware.
- Initializes from HTML code, JSON, or JavaScript objects.
- Implemented as a jQuery plugin.
(Note: this doesn't mean that you have to use jQuery for your whole site.)
Dynatree runs best, when the HTML document is rendered in a strict mode like<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">.
Avoid the quirks mode.
Table of contents
- 1 Download
- 2 Examples
- 3 Quick start
- 4 Initializing the tree
- 5 Handling events
- 5.1 DynaTree callbacks
- 5.2 Handling activate/click
- 5.3 Handling selection events
- 5.4 Handling focus changes
- 5.5 Loading child nodes on demand ('lazy loading')
- 5.5.1 Loading custom formats
- 6 Drag'n'drop
- 7 Persistence
- 8 Programming dynatree
- 8.1 Dynatree Plugin methods
- 8.2 DynaTree class members
- 8.3 DynaTreeNode class members
- 8.4 Programming examples
- 8.4.1 Example: Select a node with key '1234'
- 8.4.2 Example: Access the currently active node
- 8.4.3 Example: Retrieve a node using for a DOM element or jQuery object
- 8.4.4 Example: Rename the active node
- 8.4.5 Example: Add a child to the active node
- 8.4.6 Example: Add a hover handler and find the hovered node from any sub element
- 8.4.7 Example: Expand all nodes
- 8.4.8 Example: Save current tree status to the backend
- 8.4.9 Example: activate a node depending on URL
- 9 Theming and translation
- 9.1 Translation
- 10 Feedback, version history, credits and known issues
- 10.1 Credits
- 10.2 Feedback and support
1 Download
You can download the current dynatree package at http://code.google.com/p/dynatree/downloads. It contains everything needed including the source, some documentation and examples.
jQuery is already included, but you can check the jQuery site for the latest versions of jquery.js and ui.core.js.
2 Examples
This documentation contains script examples and links.
See also the Example Browser for some more advanced live demos.
Using the [View source code] link in the Example Browser is probably the best way to learn about Dynatree.
3 Quick start
Let's start with a simple example:
<html>
<head>
<!-- Include the required JavaScript libraries: -->
<script src='jquery/jquery.js' type="text/javascript"></script>
<script src='jquery/jquery-ui.custom.js' type="text/javascript"></script>
<script src='jquery/jquery.cookie.js' type="text/javascript"></script>
<link rel='stylesheet' type='text/css' href='skin/ui.dynatree.css'>
<script src='jquery.dynatree.js' type="text/javascript"></script>
<!-- Add code to initialize the tree when the document is loaded: -->
<script type="text/javascript">
$(function(){
// Attach the dynatree widget to an existing <div id="tree"> element
// and pass the tree options as an argument to the dynatree() function:
$("#tree").dynatree({
onActivate: function(node) {
// A DynaTreeNode object is passed to the activation handler
// Note: we also get this event, if persistence is on, and the page is reloaded.
alert("You activated " + node.data.title);
},
persist: true,
children: [ // Pass an array of nodes.
{title: "Item 1"},
{title: "Folder 2", isFolder: true,
children: [
{title: "Sub-item 2.1"},
{title: "Sub-item 2.2"}
]
},
{title: "Item 3"}
]
});
});
</script>
</head>
<body>
<!-- Add a <div> element where the tree should appear: -->
<div id="tree"> </div>
</body>
</html>
As an alternative, it is possible to leave away the children option and add a <ul> inside the <div id="tree"> tag instead.
See Initializing the tree structure from a <ul> element for an example.
I am going into more details in the following sections.
4 Initializing the tree
Dynatree is based on and made for jQuery. If you are not familiar with this, you might also want to check the jQuery documentation.
The tree is initialized in the onload event of the html document. In jQuery this is usually done by passing a function to $(..) :
<head>
<script type="text/javascript">
$(function(){
[…]
});
</script>
</head>
The dynatree widget is then attached to an empty <div > element with a given ID of 'tree'. This id can have any value, it only has to match the jQuery selector, in our case '#tree'.
Options are passed to the dynatree() function as a dictionary in curly braces:
$("#tree").dynatree({
[…]
});
4.1 Tree options
Tree options are passed as plain JavaScript objects in curly braces, e.g.{ … }.
The following script shows the available options.
All options have a reasonable default, so we may only have to pass the onActivate handler.
$("#tree").dynatree({
title: "Dynatree", // Tree's name (only used for debug outpu)
minExpandLevel: 1, // 1: root node is not collapsible
imagePath: null, // Path to a folder containing icons. Defaults to 'skin/' subdirectory.
children: null, // Init tree structure from this object array.
initId: null, // Init tree structure from a <ul> element with this ID.
initAjax: null, // Ajax options used to initialize the tree strucuture.
autoFocus: true, // Set focus to first child, when expanding or lazy-loading.
keyboard: true, // Support keyboard navigation.
persist: false, // Persist expand-status to a cookie
autoCollapse: false, // Automatically collapse all siblings, when a node is expanded.
clickFolderMode: 3, // 1:activate, 2:expand, 3:activate and expand
activeVisible: true, // Make sure, active nodes are visible (expanded).
checkbox: false, // Show checkboxes.
selectMode: 2, // 1:single, 2:multi, 3:multi-hier
fx: null, // Animations, e.g. null or { height: "toggle", duration: 200 }
noLink: false, // Use <span> instead of <a> tags for all nodes
// Low level event handlers: onEvent(dtnode, event): return false, to stop default processing
onClick: null, // null: generate focus, expand, activate, select events.
onDblClick: null, // (No default actions.)
onKeydown: null, // null: generate keyboard navigation (focus, expand, activate).
onKeypress: null, // (No default actions.)
onFocus: null, // null: set focus to node.
onBlur: null, // null: remove focus from node.
// Pre-event handlers onQueryEvent(flag, dtnode): return false, to stop processing
onQueryActivate: null, // Callback(flag, dtnode) before a node is (de)activated.
onQuerySelect: null, // Callback(flag, dtnode) before a node is (de)selected.
onQueryExpand: null, // Callback(flag, dtnode) before a node is expanded/collpsed.
// High level event handlers
onPostInit: null, // Callback(isReloading, isError) when tree was (re)loaded.
onActivate: null, // Callback(dtnode) when a node is activated.
onDeactivate: null, // Callback(dtnode) when a node is deactivated.
onSelect: null, // Callback(flag, dtnode) when a node is (de)selected.
onExpand: null, // Callback(flag, dtnode) when a node is expanded/collapsed.
onLazyRead: null, // Callback(dtnode) when a lazy node is expanded for the first time.
onCustomRender: null, // Callback(dtnode) before a node is rendered. Return a HTML string to override.
onCreate: null, // Callback(dtnode, nodeSpan) after a node was rendered for the first time.
onRender: null, // Callback(dtnode, nodeSpan) after a node was rendered.
postProcess: null, // Callback(data, dataType) before an Ajax result is passed to dynatree.
// Drag'n'drop support
dnd: {
// Make tree nodes draggable:
onDragStart: null, // Callback(sourceNode), return true, to enable dnd
onDragStop: null, // Callback(sourceNode)
// Make tree nodes accept draggables
autoExpandMS: 1000, // Expand nodes after n milliseconds of hovering.
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
revert: false, // true: slide helper back to source if drop is rejected
onDragEnter: null, // Callback(targetNode, sourceNode, ui, draggable)
onDragOver: null, // Callback(targetNode, sourceNode, hitMode)
onDrop: null, // Callback(targetNode, sourceNode, hitMode, ui, draggable)
onDragLeave: null // Callback(targetNode, sourceNode)
},
ajaxDefaults: { // Used by initAjax option
cache: false, // false: Append random '_' argument to the request url to prevent caching.
timeout: 0, // >0: Make sure we get an ajax error for invalid URLs
dataType: "json" // Expect json format and pass json object to callbacks.
},
strings: {
loading: "Loading…",
loadError: "Load error!"
},
generateIds: false, // Generate id attributes like <span id='dynatree-id-KEY'>
idPrefix: "dynatree-id-", // Used to generate node id's like <span id="dynatree-id-<key>">.
keyPathSeparator: "/", // Used by node.getKeyPath() and tree.loadKeyPath().
cookieId: "dynatree", // Choose a more unique name, to allow multiple trees.
cookie: {
expires: null // Days or Date; null: session cookie
},
// Class names used, when rendering the HTML markup.
// Note:
// These settings only apply on initialisation.
// If only single entries are passed for options.classNames, all other
// values are still set to default.
classNames: {
container: "dynatree-container",
node: "dynatree-node",
folder: "dynatree-folder",
empty: "dynatree-empty",
vline: "dynatree-vline",
expander: "dynatree-expander",
connector: "dynatree-connector",
checkbox: "dynatree-checkbox",
nodeIcon: "dynatree-icon",
title: "dynatree-title",
noConnector: "dynatree-no-connector",
nodeError: "dynatree-statusnode-error",
nodeWait: "dynatree-statusnode-wait",
hidden: "dynatree-hidden",
combinedExpanderPrefix: "dynatree-exp-",
combinedIconPrefix: "dynatree-ico-",
hasChildren: "dynatree-has-children",
active: "dynatree-active",
selected: "dynatree-selected",
expanded: "dynatree-expanded",
lazy: "dynatree-lazy",
focused: "dynatree-focused",
partsel: "dynatree-partsel",
lastsib: "dynatree-lastsib"
},
debugLevel: 1 // 0:quiet, 1:normal, 2:debug
});
Details:
- opts.classNames
- Type:
dictionary, default:$.ui.dynatree.defaults.classNames.
Override class names, that are used, when rendering the HTML markup.
Typically this will require some customization of the CSS file too.
Note: class names are applied on initialisation only.
Example:$("#tree1").dynatree({
checkbox: true,
// Override class name for checkbox icon:
classNames: {checkbox: "dynatree-radio"},
[...] - opts.clickFolderMode
- Type:
integer, default:3.
Define, how a mouse click will change a folder status.- Single-clicking a folder title (or pressing the [enter] or [space] key) will activate it.
In this mode documents and folders behave the same. - Single-clicking a folder title expands the node. The folder cannot be activated.
- Single-clicking a folder title will activate and expand it.
- Single-clicking a folder title (or pressing the [enter] or [space] key) will activate it.
- opts.persist
- Type:
boolean, default:false.
True: the tree's expansion, activation, focus and selection state is saved to a session cookie, so reloading the page will restore the status.
Notes: this may not work with lazy nodes.
Seecookieoption.
4.2 Initializing the tree structure
A tree structure is made of nodes. Every node may in turn contain a list child nodes.
A dynatree always has exactly one root node, and all top level nodes of our tree are created as direct descendants.
The root node is usually hidden, so we only see the nodes that we have added.
Dynatree can read it's structure from different sources:
- If the
childrenoption is passed, it will be used. - Otherwise, if the
initAjaxoption is passed, it will be used. - Otherwise, if the
initIdoption is passed, it will be used. - Otherwise, if the the container <div> element contains a <ul> element, it will be used.
- Otherwise, the tree is left empty.
But we may choose to do so, if we want to modify the tree programmatically.
Methods 1-3 expect a list of node options, as described in the following sections.
4.2.1 Node options
Node options are defined as plain JavaScript objects in curly braces, e.g.{ … }.
Most of the time we pass a list of node options like thischildren: [ { … }, { … }, … ].
The follwing snippet shows the attributes that can be used to define a tree node.
There are reasonable default values for all options, so we may only have to pass a title.
children: [
{
title: null, // (required) Displayed name of the node (html is allowed here)
key: null, // May be used with activate(), select(), find(), ...
isFolder: false, // Use a folder icon. Also the node is expandable but not selectable.
isLazy: false, // Call onLazyRead(), when the node is expanded for the first time to allow for delayed creation of children.
tooltip: null, // Show this popup text.
href: null, // Added to the generated <a> tag.
icon: null, // Use a custom image (filename relative to tree.options.imagePath). 'null' for default icon, 'false' for no icon.
addClass: null, // Class name added to the node's span tag.
noLink: false, // Use <span> instead of <a> tag for this node
activate: false, // Initial active status.
focus: false, // Initial focused status.
expand: false, // Initial expanded status.
select: false, // Initial selected status.
hideCheckbox: false, // Suppress checkbox display for this node.
unselectable: false, // Prevent selection.
// The following attributes are only valid if passed to some functions:
children: null // Array of child nodes.
// NOTE: we can also add custom attributes here.
// This may then also be used in the onActivate(), onSelect() or onLazyTree() callbacks.
},
[…]
]
The node options are also passed to the event handlers and can be accessed like this:
onActivate: function(node) {
alert("You activated " + node.data.title);
},
Details:
- data.activate
- If set to true, the node will be initially activated.
- data.addClass
- Class name that is added to the node's <span> element.
Example:{ title: "Pretty node", addClass: "customClass1" }
or<li data="addClass: 'customClass1'">Pretty node
can be styled using css asspan.customClass1 a { background-color: maroon; color: yellow; }
- data.children
- Array of node options, that are used to generate child nodes.
This option is only valid when passed to certain functions, likeDynTreeNode.addChild(). - data.expand
- If set to true, the node will be initially expanded.
- data.focus
- If set to true, the node will be initially focused.
- data.hideCheckbox
- Suppress display of checkbox icon.
It is still possible to (de)select the node using the API, keyboard or initialization data. (The selection state may be visualized by a CSS style.)
See alsounselectable. - data.href
- Contains the link URL, if the tree was initialized from a <ul> tag:
<div id="tree"><ul>
<li class="expanded folder">Search engines
<ul>
<li><a href="http://www.google.com" target="_self">Google</a>
<li><a href="http://www.bing.com">Bing</a> - data.icon
- Optional name of an image file relative to the image directory.
If null specified, a default image is used depending on the node type (folder or document). This is the default.
If false specified, no image is displayed. - data.isFolder
- Marks node as folder (treated as a document otherwise).
See Folders and Documents - data.isLazy
- Enables delayed loading of the node contents. When a lazy node is expanded for the first time, the onLazyRead() callback is called.
- data.key
- Uniquely identifies this node. It is optional, but we need it for some functions like
tree.activateKey().
If specified, the node's element id is generated by prepending a prefix like this:dynatree-id-1234.
If not specified, a random key id is generated. - data.select
- If set to true, the node will be initially selected.
- data.target
- See data.href.
- data.title
- Type: string, default: "".
Displayed name of the node (html markup is allowed here). - data.tooltip
- Optional string to display in a popup window when the cursor hovers over the node.
- data.unselectable
- Prevent (de)selection of this node using API, mouse, and keyboard.
It is still possible, to (de)select this node in the initialization data or indirectly (in multi-hier mode).
See alsohideCheckbox.
To override the node attribute defaults, modify the structure before initializing dynatree:
<script type="text/javascript">
$.ui.dynatree.nodedatadefaults["icon"] = false; // Turn off icons by default
$(function(){
$("#tree").dynatree({
rootVisible: false,
[...]
4.2.2 Folders and documents
When a node is of type folder, it get's a special folder icon and class name.
We usually use them to hold child nodes.
Also, folders can be expanded by clicking the title text (this behavior can be controlled using the clickFolderMode option).
Non-folders ('documents') may also contain child nodes.
Clicking on a child node activates it, so we have to click the small [+] icon in front to expand such a document node.
4.2.3 Initializing the tree structure from an object array
In the quick example above we have already seen how a tree is initialized by passing a node array with the children option.
$("#tree").dynatree({
children: [ … ],
[…]
});
See also Node options.
4.2.4 Initializing the tree structure from an Ajax response
Instead of passing an array of data objects, we can pass a url in the initAjax option that will be used to contact an Ajax web service.
$("#tree").dynatree({
initAjax: {url: "/ajaxTree",
data: {key: "root", // Optional arguments to append to the url
mode: "all"
}
},
[…]
});
The web service is expected to return a valid JSON node list, formatted like this:[ { ... }, { ... }, ... ].
Because the data request is performed asynchronously, the document will load faster. Dynatree will display a spinning wheel, while waiting for the request to complete.
See Loading child nodes on demand for details.
See Persistence for lazy trees for a sample on how to combine this with persistence.
4.2.5 Initializing the tree structure from a <ul> element
If the container <div> contains a <ul> element, the node titles are read from the <li> tags.
If the title contains html markup, it may be better to wrap it inside a span element.
All other node options are specified in the data attribute of a <li> element. For example
<li data="url: 'http://jquery.com'">jQuery home
<li data="url: 'http://example.com', addClass: 'customClass1'">Example page
Note that the data attribute is not valid in <li> elements in some doctypes (HTML 4.01 transitional and Strict and XHTML 1.0 Strict). Validators will complain about this.
Also, if the id attribute is used to pass a key, it should be alphanumeric and start with a letter to be compliant.
(This doesn't seem to affect the functionality however.)
Nested <ul> elements are used to build a hierarchical tree structure.
After the <ul> element was parsed, it is removed from the DOM tree.
Note that <a> elements are recognized:<li><a href='URL' target='TARGET'>TITLE</a> will result in
node.data.title = TITLE
node.data.href = URL
node.data.target = TARGET
<head>
<!-- Include the required JavaScript libraries: -->
<script src='jquery/jquery.js' type="text/javascript"></script>
<script src='jquery/jquery-ui.custom.js' type="text/javascript"></script>
<link rel='stylesheet' type='text/css' href='skin/ui.dynatree.css' >
<script src='jquery.dynatree.js' type="text/javascript"></script>
<!-- Add code to initialize the tree when the document is loaded: -->
<script type="text/javascript">
$(function(){
$("#tree").dynatree({
onActivate: function(node) {
alert("You activated " + node);
}
});
});
</script>
</head>
<body>
<!-- Add a <div> element where the tree should appear: -->
<div id="tree">
<ul>
<li id="key1" title="Look, a tool tip!">item1 with key and tooltip
<li id="key2" class="selected">item2: selected on init
<li id="key3" class="folder">Folder with some children
<ul>
<li id="key3.1">Sub-item 3.1
<li id="key3.2">Sub-item 3.2
</ul>
<li id="key4" class="expanded">Document with some children (expanded on init)
<ul>
<li id="key4.1">Sub-item 4.1
<li id="key4.2">Sub-item 4.2
</ul>
<li id="key5" class="lazy folder">Lazy folder
</ul>
</div>
</body>
4.2.6 Initializing the tree structure programmatically
Finally, it is always possible to program the DynaTree and DynaTreeNode objects directly.
See also Programming dynatree.
$(function(){
// Initialize the tree in the onload event
$("#tree").dynatree({
onActivate: function(node) {
alert("You activated " + node);
}
});
// Now get the root node object
var rootNode = $("#tree").dynatree("getRoot");
// Call the DynaTreeNode.addChild() member function and pass options for the new node
var childNode = rootNode.addChild({
title: "Child node 1",
tooltip: "This child node was added programmatically.",
isFolder: true
});
//
childNode.addChild({
title: "Document using a custom icon",
icon: "customdoc1.gif"
});
});
5 Handling events
When a user clicks a node, we want to react in some way. So at least we want to implement an onActivate handler.
All event handlers are passed an instance of DynaTreeNode as argument.this refers to the Dynatree object.
The node options can be accessed like this:
onActivate: function(node) {
alert("You activated " + node.data.title);
},
See also Programming dynatree.
5.1 DynaTree callbacks
The this context is set to the tree object.
Use tree.isUserEvent(), tree.isInitializing(), and tree.isReloading() to determine who generated this event.
- opts.onActivate(node)
- Called when a node was activated.
onActivate: function(node) {
if(node.tree.isUserEvent()){
[...] // Do something after user activated the node (using mouse or keyboard)
}
} - opts.onBlur(node)
- Called when a node lost the focus.
- opts.onClick(node, event)
- Called when a node was clicked.
Usenode.getEventTargetType(event)to check which area was clicked.
Returnfalseto prevent default processing (setting focus, activate the node, expand folders, etc.).onClick: function(node, event) {
if(node.getEventTargetType(event) == "title"){
[...] // Handle the click event
return false;// Prevent default processing
}
} - opts.onCreate(node, nodeSpan)
- Called after a node's HTML tag was created, i.e. when a node becomes visible for the first time.
This callback may be used to bind events or widgets for nodes that are created lazily or programatically.onCreate: function(node, nodeSpan) {
(Note that the use of jQuery live events may often be a more efficient solution.)
$(span).click(function(e){
alert('clicked ' + node);
});
}
See alsoopts.onRender. - opts.onCustomRender(node)
- Called before a node's title HTML tag will be created. This happens when a node becomes visible for the first time.
This callback may return a string that will be used instead of the default HTML markup.onCustomRender: function(node) {
return "<span class='dynatree-title'>SPAM</span>"
} - opts.onDblClick(node, event)
- Called when a node was double clicked.
Usenode.getEventTargetType(event)to check which area was clicked.
Returnfalseto prevent default processing (currently none). - opts.onDeactivate(node)
- Called when a node was deactivated.
- opts.onExpand(flag, node)
- Called when a node was expanded/collapsed.
- opts.onFocus(node)
- Called when a node receives the focus.
- opts.onKeydown(node, event)
- Called on keydown events.
Returnfalseto prevent default processing (generate keyboard navigation, focus, expand, activate, etc.). - opts.onKeypress(node, event)
- Called on keypress events.
Returnfalseto prevent default processing (currently none). - opts.onLazyRead(node)
- Called when a lazy node is expanded for the first time.
- opts.onPostInit(isReloading, isError [, XMLHttpRequest, textStatus, errorThrown])
- Called when the tree was (re)loaded.
In case of an error,isErrorwill betrueand addition info is passed: XMLHttpRequest, textStatus, errorThrown. - opts.onQueryActivate(flag, node)
- Called before a node is (de)activated. Return
falseto prevent this. - opts.onQueryExpand(flag, node)
- Called before a node is expanded/collapsed. Return
falseto prevent this. - opts.onQuerySelect(flag, node)
- Called before a node is (de)selected. Return
falseto prevent this. - opts.onRender(node, nodeSpan)
- Called after every time a node's HTML tag was created or changed.
This callback may be used to modify the HTML markup.onRender: function(node, nodeSpan) {
See also
$(nodeSpan).find("a.dynatree-title").css("color", "red");
}opts.onCreate. - opts.onSelect(flag, node)
- Called when a node was (de)selected.
- opts.dnd.onDragStart(sourceNode)
- This function must be defined to enable dragging for the tree. Return
falseto cancel dragging of node. - opts.dnd.onDragEnter(targetNode, sourceNode, ui, draggable)
- Return
trueto make tree nodes accept dropping of draggables. - opts.dnd.onDragOver(targetNode, sourceNode, hitMode, ui, draggable)
- opts.dnd.onDragLeave(targetNode, sourceNode, ui, draggable)
- opts.dnd.onDrop(targetNode, sourceNode, hitMode, ui, draggable)
- This function must be defined to enable dropping of items on the tree.
- opts.dnd.onDragStop(sourceNode)
- ajaxOptions.success(node)
- (Passed as argument to
node.appendAjax(...).)
Called after nodes have been created and the waiting icon was removed. 'this' is the options for this Ajax request - ajaxOptions.error(node, XMLHttpRequest, textStatus, errorThrown)
- (Passed as argument to
node.appendAjax(...).)
5.2 Handling activate/click
The following example handles an activation event by opening a url in a new window.
This assumes, that we have defined an additional custom attribute named 'url' in the node options, like so:
<ul>
<li data="url: 'http://jquery.com'">jQuery home
<li data="url: 'http://docs.jquery.com'">jQuery docs
or
children: [
{ title: "jQuery home", url: "http://jquery.com" },
{ title: "jQuery docs", url: "http://docs.jquery.com" },
Also, the title of the currently active node is displayed in the <span id='echoActive'> tag.
$("#tree").dynatree({
[…]
onActivate: function(node) {
if( node.data.url )
window.open(node.data.url);
$("#echoActive").text(node.data.title);
},
onDeactivate: function(node) {
$("#echoActive").text("-");
},
[…]
});
5.3 Handling selection events
The following example writes the title of the currently focused node to the <span id='echoFocused'> element:
$("#tree").dynatree({
[…]
onSelect: function(flag, node) {
if( ! flag )
alert("You deselected node with title " + node.data.title);
var selectedNodes = node.tree.getSelectedNodes();
var selectedKeys = $.map(selectedNodes, function(node){
return node.data.key;
});
alert("Selected keys: " + selectedKeys.join(", "));
},
[…]
});
5.4 Handling focus changes
If we use the cursor keys to walk the tree nodes, the focus changes to the next node, but the active node remains the same unless we use [Space] or [Enter].
Also, when we click on a folder node it is only focused, but not activated.
The following example writes the title of the currently focused node to the <span id='echoFocused'> element:
$("#tree").dynatree({
[…]
onFocus: function(node) {
$("#echoFocused").text(node.data.title);
},
onBlur: function(node) {
$("#echoFocused").text("-");
},
[…]
});
5.5 Loading child nodes on demand ('lazy loading')
Dynatree supports delayed loading of tree nodes, which means we read the child nodes only when their parent is expanded.
Because the data request is performed asynchronously, the browser will not block and is still responsive. Dynatree will display a spinning wheel, while waiting for the request to complete.
To make this happen, we have to
- Mark some or all nodes as lazy, by setting the
isLazyoption to true. - Implement a backend web service that delivers a JSON formatted node list.
- Implement the
onLazyReadcallback to send an Ajax request, create the child nodes, and set the 'ok' status.
$("#tree").dynatree({
[…]
onLazyRead: function(node){
node.appendAjax({url: "/sendData",
data: {"key": node.data.key, // Optional url arguments
"mode": "all"
}
});
},
[…]
});
Typically we would implement onLazyRead by calling the node.appendAjax() function.
It expects one option object argument, as described in the documentation for the jQuery.ajax() command.
These options are set by default:cache: false and dataType: "json".
Note that the success and error options are implemented differently from the jQuery standard:
They pass different arguments and are called after the Dynatree default processing took place.
This makes it easy to use the success callback to apply any custom postprocessing, for example activating a node or binding events.
$("#tree").dynatree({
[…]
onLazyRead: function(node){
node.appendAjax({url: "/sendData",
data: {"key": node.data.key, // Optional url arguments
"mode": "all"
},
// (Optional) use JSONP to allow cross-site-requests
// (must be supported by the server):
// dataType: "jsonp",
success: function(node) {
// Called after nodes have been created and the waiting icon was removed.
// 'this' is the options for this Ajax request
},
error: function(node, XMLHttpRequest, textStatus, errorThrown) {
// Called on error, after error icon was created.
},
cache: false // Append random '_' argument to url to prevent caching.
});
},
[…]
});
The web service is expected to return a valid JSON node list, formatted like this:[ { "title": "Node1", "isLazy": true, "key": "BC13B21636CD6D5C", … }, { … }, … ]
See Node options for a list of supported attributes.
When the response was received, appendAjax() appends the child nodes and calls node.setLazyNodeStatus(DTNodeStatus_Ok) to remove the wait icon.
Note that initAjax is simply a special case, where the tree's root node is loaded on startup.
See Initializing the structure from an Ajax response for a sample to initialize the whole tree with an Ajax request.
This sample code (written in Python) shows how a server could create a response:
# Build node list as JSON formatted string:
res = '['
res += '{ "title": "Node 1", "key": "k1", "isLazy": true },'
res += '{ "title": "Node 2", "key": "k2", "isLazy": true },'
res += '{ "title": "Node 3", "key": "k3", "isLazy": true }' # no trailing "," at the last line
res += ']'
# Add support for the JSONP protocol:
# This means, if the request URL contains an argument '?callback=xxx',
# wrap the result as 'xxx(result)'
if "callback" in argDict:
res = argDict["callback"] + "(" + res + ")"
# Make sure, content type is JSON:
start_response("200 OK", [("Content-Type", "application/json")])
# Return result (the square brackets are Python / WSGI specific):
return [ res ]
See dynatree_server.py for a sample implementation of a web server that handles this (~150 lines of Python code).
When this server is running, you can try this live example of a lazy tree.
5.5.1 Loading custom formats
If we need more control, or if the server cannot provide JSON in Dynatree's native format, we could also use jQuery.ajax() to fetch the data, then transform it and callnode.addChild():
$("#tree").dynatree({
[…]
onLazyRead: function(node){
$.ajax({
url: […],
success: function(data, textStatus){
// In this sample we assume that the server returns JSON like
// { "status": "...", "result": [ {...}, {...}, ...]}
if(data.status == "ok"){
// Convert the response to a native Dynatree JavaScipt object.
var list = data.result;
res = [];
for(var i=0, l=list.length; i<l; i++){
var e = list[i];
res.push({title: "" + i + ": " + e.fcurr + "-" + e.tcurr + ":" + e.ukurs,
icon: false});
}
// PWS status OK
node.setLazyNodeStatus(DTNodeStatus_Ok);
node.addChild(res);
}else{
// Server returned an error condition: set node status accordingly
node.setLazyNodeStatus(DTNodeStatus_Error, {
tooltip: data.faultDetails,
info: data.faultString
});
}
}
});
[…]
});
6 Drag'n'drop
Drag and drop functionality is enabled by defining the appropriate callbacks:
$("#tree").dynatree({
[...]
dnd: {
onDragStart: function(node) {
/** This function MUST be defined to enable dragging for the tree.
* Return false to cancel dragging of node.
*/
logMsg("tree.onDragStart(%o)", node);
return true;
},
onDrop: function(node, sourceNode, hitMode, ui, draggable) {
/** This function MUST be defined to enable dropping of items on
* the tree.
*/
logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode);
sourceNode.move(node, hitMode);
}
}
});
There are a lot more callbacks that can be used to fine tune the behaviour. Check the source code in the samples in the Example Browser to learn more.
7 Persistence
When initializing a tree in persist mode, we first check, if persistence cookies already exist.
If not, we assume first-time initializing, read the status from the tree source, and store it into new cookies.
Otherwise we assume re-loading, ignore the source node attributes and override them using the cookie info.
In either case, the 'active', 'expand' and 'select' status of a node is read from the data or restored from the cookies.
However, no onQueryActivate, onActivate, onExpand, onSelect, etc. events are fired. (The only event that may be fired is onFocus.)
In order to generate these events on reload, we may use the callback function onPostInit() and tree.reactivate().
$("#tree").dynatree({
[…]
onPostInit: function(isReloading, isError) {
// 'this' is the current tree
// isReloading is true, if status was read from existing cookies
// isError is only used in Ajax mode
// Fire an onActivate() event for the currently active node
this.reactivate();
},
onActivate: function(node) {
// Use status functions to find out about the calling context
var isInitializing = node.tree.isInitializing(); // Tree loading phase
var isReloading = node.tree.isReloading(); // Loading phase, and reading status from cookies
var isUserEvent = node.tree.isUserEvent(); // Event was triggered by mouse or keyboard
$("#echoActive").text(node.data.title);
},
7.1 Persistence for lazy trees
The problem with restoring the status of a lazy tree is, that the currently active or selected nodes may not be part of the tree, when it is freshly re-loaded.
The basic idea is to leave it up to the backend web service to deliver not only the top-level nodes, but also all nodes that are required to display the current status.
For example, it may be neccessary to render 3 parent nodes, if the active node is at level # 4.
The backend may also deliver all child nodes of expanded parents.
Or in selectMode 3 (hierarchical) we may want to send all nodes, that are partly selected.
initAjax (and appendAjax) have 3 options, that make it easy to pass persistence information to the web service.
See dynatree_server.py for a sample implementation of a web server that handles this (~150 lines of Python code).
When this server is running, you can try this live example of a lazy tree.
$("#tree").dynatree({
[…]
initAjax: {url: "/ajaxTree",
data: {key: key,
mode: mode,
filter: filter
},
addActiveKey: true, // add &activeKey= parameter to URL
addFocusedKey: true, // add &focusedKey= parameter to URL
addExpandedKeyList: true // add &expandedKeyList= parameter to URL
},
onPostInit: function(isReloading, isError) {
// In lazy mode, this will be called *after* the initAjax request returned.
// 'this' is the current tree
// isReloading is set, if status was read from existing cookies
// isError is set, if Ajax failed
// Fire an onActivate() event for the currently active node
this.reactivate();
},
onActivate: function(node) {
// Use status functions to find out about the calling context
var isUserEvent = node.tree.isUserEvent(); // Event was triggered by mouse or keyboard
$("#echoActive").text(node.data.title);
},
8 Programming dynatree
The dynatree widget provides a set of plugin methods, that can be called directly.
For example
$("#tree").dynatree("disable");
However this plugin implementation is based on a class called DynaTree that holds a set of DynaTreeNode objects.
These classes expose methods that can be accessed for enhanced functionality.
For example:
// Get the DynaTree object instance:
var tree = $("#tree").dynatree("getTree");
// Use it's class methods:
tree.activateKey("key1234");
// Get a DynaTreeNode object instance:
var node = tree.getNodeByKey("key7654");
var rootNode = $("#tree").dynatree("getRoot");
// and use it
node.toggleExpand();
8.1 Dynatree Plugin methods
Besides the constructor, that is called like this:
$("#tree").dynatree({
[…]
});
The following methods are globally available from the ui.dynatree namespace:
- $.ui.dynatree.getNode(el)
- Return a DynaTreeNode object for a given DOM element.
`el` may be a DOM element or a jQuery object. Example:$("#tree a").hover(function(){
var node = $.ui.dynatree.getNode(this);
logMsg("Hover in %s", node);
}, function(){
[...]
}); - $.ui.dynatree.getPersistData(cookieId, cookieOpts)
- Return cookie persistence info as dictionary.
- $.ui.dynatree.version
- Release version number.
The following methods are directly available from the plugin:
- $("#tree").dynatree("disable")
- Disable event handling and add a class 'dynatree-disabled' to the container element.
- $("#tree").dynatree("enable")
- Enable event handling and remove the 'dynatree-disabled' class from the container element.
- $("#tree").dynatree("option", )
- Set a dynatree option at runtime. Example:
$("#tree").dynatree("option", "autoCollapse", true);
$("#tree").dynatree("option", "fx", { height: "toggle", duration: 200 }); - $("#tree").dynatree("getTree")
- Return the associated
DynaTreeobject. - $("#tree").dynatree("getRoot")
- Return the root
DynaTreeNodeobject of the tree. - $("#tree").dynatree("getActiveNode")
- Return the
DynaTreeNodeobject that is currently active.
(May benull.) - $("#tree").dynatree("getSelectedNodes")
- Return an array of
DynaTreeNodeobjects that are currently selected.
(May be empty:[ ].)
8.2 DynaTree class members
- tree.activateKey(key)
- Activate and focus node with a given key and fire focus and activate events.
IfactiveVisibleoption is set, all parents will be expanded as necessary.
If key is null, the current activation is removed.
Return the active DynaTreeNode. - tree.count()
- Return the number of nodes.
- tree.disable()
- Disable input for the tree and display gray. This is a shortcut for
$("#tree").dynatreee("disable"). - tree.enable()
- Complement to
tree.disable(). - tree.enableUpdate(enable)
- Turn rendering on or off and return the previous mode. Disabling update may speedup processing, when adding lots of nodes.
Don't forget to turn rendering back on, after applying the changes:var prevMode = tree.enableUpdate(false);
[...]
tree.enableUpdate(prevMode); - tree.getActiveNode()
- Return the currently active DynaTreeNode or null.
- tree.getNodeByKey(key)
- Return DynaTreeNode with a given key or 'null' if not found.
- tree.getPersistData()
- Return cookie persistence info as dictionary.
There is also a global function available:$.ui.dynatree.getPersistData(cookieId, cookieOpts). - tree.getRoot()
- Return the invisible root DynaTreeNode object. All visible toplevel nodes are children of this system node.
- tree.getSelectedNodes(stopOnParents)
- Return a list of currently selected DynaTreeNodes (may be an empty array).
If stopOnParents is set totrue, children of selected nodes are skipped. This may be convenient in selectMode:3 (multi-hier). - tree.initialize()
- Constructor (internal use).
- tree.isInitializing()
- Return
true, if the tree is in the init phase.
Use this function in an event handler, to check if the event was fired during a page reload, when the cookie persistence is applied. - tree.isReloading()
- Return
true, if the tree is in the init phase and persistence is on, and the current status was read from existing cookies.
Use this function in an event handler, to check if the event was fired during a page reload, when the cookie persistence is applied. - tree.isUserEvent()
- Return
true, if the tree is processing a user event.
Use this function in an event handler, to check if the event was fired in response to a mouse click or key stroke.
Otherwise, the the event was generated by an API call or during initialization. - tree.loadKeyPath(keyPath, callback)
- Make sure that a node with a given ID is loaded, by traversing - and loading - its parents. This method is ment for lazy hierarchies.
A callback is executed for every node as we go.tree.loadKeyPath("/_3/_23/_26/_27", function(node, status){
if(status == "loaded") {
// 'node' is a parent that was just traversed.
// If we call expand() here, then all nodes will be expanded
// as we go
node.expand();
}else if(status == "ok") {
// 'node' is the end node of our path.
// If we call activate() or makeVisible() here, then the
// whole branch will be exoanded now
node.activate();
}else if(status == "notfound") {
var seg = arguments[2],
isEndNode = arguments[3];
}
}); - tree.logDebug(msg), logInfo(msg), logWarning(msg)
- (Internal use).
- tree.reactivate(setFocus)
- Fire onQueryActivate and onActivate events for the currently active node (if there is one).
This may be useful when processing an onPostInit callback. - tree.redraw()
- Render all visible nodes. See
node.render()for details. - tree.reload()
- Reload the the tree.
For lazy trees this is done, by re-submitting the Ajax request that was defined in theinitAjaxoption.
This will not work, if the tree was loaded from an embedded <UL> element, because these elements are removed after they have been rendered. - tree.renderInvisibleNodes()
- Force immediate HTML creation for all nodes, even if inside collapsed branches. This may be useful, if we want to bind events or otherwise must access these HTML elements.
It will however degrade performance, especially on large trees!
Seenode.render()for details. - tree.selectKey(key, flag)
- Select or deselect node with a given key and fire focus and select events.
Return the selected DynaTreeNode. - tree.serializeArray(stopOnParents)
- Return selected nodes as array of
{name: 'TreeName', value: 'NodeKey'}objects, where name is the 'name' attribute of the tree's <div> element.
This format is compatible with jQuery's serializeArray() function and may be used in $.post() calls.
See also the 'form' sample in the Example Browser. - tree.toDict(includeRoot)
- Convert the tree into a JavaScript object.
If 'includeRoot' is false or omitted, the result is an array of node dcts.
Seenode.toDict()for details. - tree.visit(fn, includeRoot)
- Call
fn(node)for all nodes.
Stop iteration, if fn() returns false. Stop iteration of the current branch, if fn() returns 'skip'.
8.3 DynaTreeNode class members
- Attribute 'data'
- Use this attribute to access all node options that were passed to create this node.
For examplenode.data.titleornode.data.tooltip. See also Node options. - node.activate()
- Activate this node - according to flag - and fire a onActivate event.
IfactiveVisibleoption is set, all parents will be expanded as necessary.
Focus is not set. - node.activateSilently()
- Same as
activate(), but does not fire events. - node.addChild(nodeData[, beforeNode])
- Append a new child node.
nodeData may be a node data object as defined in Node options, or an array thereof. Also objects and arrays of typeDynaTreeNodeare allowed.
Example:var node = $("#tree").dynatree("getTree").getNodeByKey("1234");
Since the nodeData may be a nested data structure, it is possible to create a deep hierarchy with one call.
node.addChild({title: "New Node", key: "3333"});
The optional argument beforeNode specifies a childDynaTreeNodethat the new node will be inserted before. (If this parameter is null or omitted, the new node will be appended.) - node.appendAjax(ajaxOptions)
- Accepts a standard jQuery Ajax option object.
An asynchronous request is started, so this function returns immediately. While loading, a spinning wheel is displayed. On error, a red icon is shown.
The request handler must return a JSON object, formatted like the data'schildrenobject.
Use thesetLazyNodeStatus()function to display the result.
See Loading child nodes on demand ('lazy loading') for details. - node.countChildren()
- Return the number of descendant nodes, i.e. direct and indirect children.
- node.deactivate()
- Deactivate this node and fire an onDeactivate event.
- node.expand(flag)
- Expand or collapse this node - according to flag.
- node.focus()
- Set focus to this node. Parent nodes are expanded, if this is necessary to make it visible.
- node.getChildren()
- Return list of child nodes or
null.
For lazy nodes that have not yet been loaded,undefinedis is returned. - node.getEventTargetType(event)
- Return the part of a node, that a click event occurred on.
Possible values: 'prefix' 'expander', 'checkbox', 'icon', 'title'.nullis returned else.
Note: there is no check, if the event was fired on this node. - node.getLevel()
- Return the depth (i.e. number of parent nodes).
0 is returned for the root node. - node.getNextSibling()
- Return the successor node or
null. - node.getParent()
- Return the parent node or
null. - node.getPrevSibling()
- Return the predecessor node or
null. - node.hasChildren()
- Return
trueif node has child nodes.
Returnfalseif node is a leaf, i.e. has no child nodes.
Returnundefinedif this is a lazy node, that was not yet successfully loaded.
A test for 'node is surely empty' would be coded likeif(node.hasChildren() === false) ...
- node.isActive()
- Return true, if this node is activated. Only one tree node may be active at any time.
- node.isChildOf(otherNode)
- Return true, if this node is a direct child of
otherNode. - node.isDescendantOf(otherNode)
- Return true, if this node is a descendent (direct or indirect child) of
otherNode. - node.isExpanded()
- Return true, if the node is expanded.
- node.isFirstSibling()
- Return true, if this node is the first of all children of the current parent.
- node.isFocused()
- Return true, if this node is has the focus.
- node.isLastSibling()
- Return true, if this node is the last of all children of the current parent.
- node.isLazy()
- Return true, if the node is lazy (loaded or not).
- node.isLoading()
- Return true, if the node is lazy and currently loading (i.e. an Ajax request is active).
- node.isSelected()
- Return true, if the node is selected.
- node.isStatusNode()
- Return true, if this is an temporary status node. Status nodes are created while loading lazy data, to display a throbber or error condition.
- node.isVisible()
- Return true, if the node is visible, i.e. all parents are expanded.
- node.makeVisible()
- Expand all parents as neccessary, to make this node visible.
- node.move(targetNode, mode)
- Move this node to
targetNode. Possiblemode:child: append this node as last child of targetNode. This is the default. To be compatble with the D'n'd hitMode, we also accept 'over'.before: add this node as sibling before targetNode.after: add this node as sibling after targetNode.
- node.reload(force)
- Deprecated. Use
reloadChildren()instead. - node.reloadChildren(callback)
- Discard and reload all children of a lazy node by triggering the
onLazyReadevent. ifcallbackis passed, it is called after the Ajax request was executed. Examplenode.reloadChildren(function(node, isOk){
if(!isOk) alert("Node " + node + " could not be reloaded.");
}); - node.remove()
- Remove this node and descendents from tree.
- node.removeChildren()
- Remove all child nodes and descendents.
- node.render(useEffects, includeInvisible)
- Redraw this node with current attributes. All HTML markup is updated and class names are added according to current status.
If this node is expanded, markup for children is recursively generated as well.useEffects:
(default: false) Set to false to prevent animated expand effects, which would be applied asynchronously.includeInvisible:
(default: false) Force HTML creation for all descendants, even if inside a collapsed branch.
This may be useful, if we want to bind events or otherwise access these HTML elements. It will however degrade performance, especially on large trees.
Most of the time, there is no need to call this explicitly, since it is internally called on state changes. - node.resetLazy()
- Remove all children from a lazy node and make sure it is collapsed. The node will be re-loaded when expanded the next time.
- node.scheduleAction(mode, ms)
- Schedule a delayed action. Possible
mode:expand: Expand this node after ms microseconds.activate: Activate this node after ms microseconds.cancel: cancel pending action, if any was scheduled.
- node.select(flag)
- Select or deselect this node - according to flag - and fire an onSelect event.
- node.setLazyNodeStatus(status)
- Display a dummy child node, to provide feedback, when loading a lazy node's content.
Possible status:DTNodeStatus_Loading: show a spinning wheel, with 'loading...' message.DTNodeStatus_Error: show an error icon and message.DTNodeStatus_Ok: Remove the status node.
strings.loadingandstrings.loadErroroptions. - node.setTitle(title)
- Change current node title and redraw.
- node.sortChildren(cmp, deep)
- Sort child list by title.
cmd: optional compare function. If ommitted sorting is done by node titles.deep: optional: pass true to sort all descendant nodes.
Example// Custom compare function (optional) that sorts case insensitive
var cmp = function(a, b) {
a = a.data.title.toLowerCase();
b = b.data.title.toLowerCase();
return a > b ? 1 : a < b ? -1 : 0;
};
node.sortChildren(cmp, false); - node.toDict(recursive, callback)
- Convert the node into a JavaScript object.
recursive: set to true, to include child nodes.callback: (optional) function to allow modifications.
Examplevar cb = node.toDict(true, function(dict){
dict.title = "Copy of " + dict.title;
delete dict.key; // prevent duplicate keys
}); - node.toggleExpand()
- Toggle expansion state.
Expanding a lazy node, fires a onLazyRead event. - node.toggleSelect()
- Toggle selection state.
- node.visit(fn, includeSelf)
- Call
fn(node)for all child nodes.
Stop iteration, if fn() returns false. Stop iteration of the current branch, if fn() returns the string 'skip'. - node.visitParents(fn, includeSelf)
- Call
fn(node)for all parent nodes.
Stop iteration, if fn(node) returns false.
8.4 Programming examples
The follwing code snippets should give an idea on how to use the API.
8.4.1 Example: Select a node with key '1234'
$("#tree").dynatree("getTree").selectKey("1234");
// or another way:
$("#tree").dynatree("getTree").getNodeByKey("1234").select();
// .. or yet another way (if 'generateIds' option was enabled):
$("#dynatree-id-1234").prop("dtnode").select();
8.4.2 Example: Access the currently active node
var node = $("#tree").dynatree("getActiveNode");
if( node ){
alert("Currently active: " + node.data.title);
}
8.4.3 Example: Retrieve a node using for a DOM element or jQuery object
$(".dynatree-partsel").each(function(){
var node = $.ui.dynatree.getNode(this);
[...]
});
8.4.4 Example: Rename the active node
var node = $("#tree").dynatree("getActiveNode");
node.data.title = "My new title";
node.render();
8.4.5 Example: Add a child to the active node
var node = $("#tree").dynatree("getActiveNode");
var childNode = node.addChild({
title: "My new node",
tooltip: "This folder and all child nodes were added programmatically."
});
Note: instead of passing a single child object, we could also pass an array of such objects.
Also, the children may again contain children attributes, thus defining a sub tree.
8.4.6 Example: Add a hover handler and find the hovered node from any sub element
// Bind hover events to the tree's <a> tags:
$("#tree a").hover(function(){
var node = $.ui.dynatree.getNode(this);
logMsg("Hover in %s", node);
}, function(){
var node = $.ui.dynatree.getNode(this);
logMsg("Hover out %s", node);
});
8.4.7 Example: Expand all nodes
$("#tree").dynatree("getRoot").visit(function(node){
node.expand(true);
});
8.4.8 Example: Save current tree status to the backend
// Get a JavaScript object copy of the tree
var dict = $("#tree").dynatree("getTree").toDict();
// ... then use Ajax to send this to your server...
8.4.9 Example: activate a node depending on URL
This sample shows how to parse the page URL and activate a node accordingly: http://server/_test-194.html?activate=_11
// Add a helper function to parse the URL
function getURLParameter(name) {
return unescape(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
// Evaluate the URL after the tree was loaded
$(function(){
$("#tree").dynatree({
[...]
onPostInit: function(isReloading, isError) {
var key = getURLParameter("activate");
if( key ) {
this.activateKey(key);
}
},
9 Theming and translation
The tree's fonts, colors, and icons are defined using CSS, so changing the appearance is simply a matter of including a custom stylesheet or by replacing icons.gif with another version.
<script src="../jquery/jquery.js" type="text/javascript"></script>
<script src="../jquery/jquery-ui.custom.js" type="text/javascript"></script>
<script src="../src/jquery.dynatree.js" type="text/javascript"></script>
<!-- Include the basic stylesheet: -->
<link href="../src/skin-vista/ui.dynatree.css" rel="stylesheet" type="text/css">
<!-- Override CSS with a custom stylesheet : -->
<link href="skin-custom/custom.css" rel="stylesheet" type="text/css" >
<script type="text/javascript">
$(function(){
$("#tree").dynatree({
[…]
});
});
</script>
Custom.css would include lines like this:
.dynatree-has-children span.dynatree-icon
{
background-position: 0 0;
background-image: url("doc_with_children.gif");
}
Changing the appearance and icons of single nodes is done by assigning a custom class:
<ul>
<li data="addClass: 'custom1'">Document with custom class
or
children: [
{ title: "Document with custom class", addClass: "custom1" },
we would then add CSS definitions for the new node to our stylesheet:
span.custom1 a
{
background-color: #ffffbb;
color: maroon;
}
span.custom1 span.dynatree-icon
{
background-position: 0 0;
background-image: url("customDoc2.gif");
}
9.1 Translation
Strings can be translated in the tree options:
$("#tree").dynatree({
[…]
strings: {
loading: "Daten werden geladen…",
loadError: "Fehler beim Laden!"
},
});
10 Feedback, version history, credits and known issues
10.1 Credits
I am using the planize plugin by Nicolas Perriault for the table of contents.
I am using prettify.js by Mike Samuel for syntax highlighting in the of source code samples.
10.2 Feedback and support
First of all: this is work in progress.
Any kind of feedback is very welcome :-)
- A discussion forum is in place to ask questions or discuss features.
- Check Stack Overflow for existing questions.
- Use the Issue Tracker to get a list of known bugs, or vote for a feature.
Please make sure you searched the group and issue tracker, before adding a new request. - If you like: Make a donation.
Remote Repository와 Local Repository 가 있다.
의존관계에 있는 artifact 를 취득할 때
HTTP, FTP, SCP 등의 프로토콜로
Remote Repository 에 접근하여
필요한 artifact를 받아
Local Repository 에 저장하여 caching 한다.
Local Repository는 maven 실행 유저의
홈디렉토리에 .m2 디렉토리가 생성된다.
(windows의 경우 Documents and Settings 아래 사용자 폴더가 홈 디렉토리다.)
의존관계에 있는 artiface 가 필요할 때
우선 Local Repository 에서 검색하고
없는 경우 Remote Repository 에서 받아내려온다.
기본 Remote Repository 를 Central Repository 라고 하며
특별한 설정 없이 이용이 가능하다.
실제 central repository에서 필요한 것을 찾기는 어려우니
아래 사이트를 사용하면 검색이용이하다.
repository 에서 필요로하는 artifact를 찾기 위해서는
group id, artifact id, version 정보가 있어야
필요로하는 유일한 artifact를 찾을 수 있다.
repository에 등록된 자료가
꼭 maven으로 만들어지지 않더라도
그것을 artifact라고부른다.
http://search.maven.org/#browse%7C47
내부망에서 작업할때
jar 파일이 없거나
maven 에러날때 직접 다운
Index of
central/
| Name | Last Modified | Size |
|---|---|---|
| HTTPClient/ | 01-Nov-2005 | 717.8 K |
| abbot/ | 12-Feb-2010 | 1.4 M |
| acegisecurity/ | 23-Dec-2005 | 4.7 M |
| activation/ | 22-Dec-2005 | 369 B |
| activecluster/ | 29-Jul-2011 | 1.5 M |
| activeio/ | 01-Nov-2005 | 4.6 M |
| activemq-jaxb/ | 01-Nov-2005 | 0 B |
| activemq/ | 01-Nov-2005 | 922.5 M |
| activesoap/ | 01-Nov-2005 | 22.9 M |
| activespace/ | 29-Jul-2011 | 117.4 K |
| adarwin/ | 01-Nov-2005 | 51.6 K |
| aelfred/ | 01-Nov-2005 | 26.7 K |
| aislib/ | 01-Nov-2005 | 271.5 K |
| altrmi/ | 01-Nov-2005 | 609.5 K |
| am/ | 12-Feb-2013 | 104.9 K |
| andromda/ | 01-Nov-2005 | 104.4 K |
| annogen/ | 01-Nov-2005 | 2.2 M |
| ant-contrib/ | 09-Aug-2008 | 3.0 M |
| ant-doxygen/ | 01-Nov-2005 | 16.4 K |
| ant/ | 01-Nov-2005 | 25.4 M |
| ant4eclipse/ | 29-Jul-2011 | 331.6 K |
| antlr/ | 01-Nov-2005 | 4.9 M |
| anttex/ | 01-Nov-2005 | 5.0 K |
| aopalliance/ | 28-Oct-2005 | 26.5 K |
| apache-jaxme/ | 01-Nov-2005 | 1.1 M |
| aptconvert/ | 01-Nov-2005 | 442.2 K |
| ar/ | 25-Aug-2012 | 28.8 M |
| args4j/ | 28-Aug-2012 | 8.2 M |
| ashkay/ | 01-Nov-2005 | 20.0 K |
| ashkelon/ | 01-Nov-2005 | 290.9 K |
| asia/ | 18-Feb-2013 | 6.6 M |
| asm/ | 07-Jul-2009 | 9.2 M |
| aspectj/ | 21-Dec-2005 | 109.6 M |
| aspectwerkz/ | 01-Nov-2005 | 247.5 M |
| at/ | 07-Jun-2013 | 21.8 M |
| au/ | 24-Jun-2011 | 5.9 M |
| avalon-activation/ | 01-Nov-2005 | 489.9 K |
| avalon-apps/ | 01-Nov-2005 | 18.6 K |
| avalon-composition/ | 01-Nov-2005 | 1.4 M |
| avalon-cornerstone/ | 01-Nov-2005 | 140.1 K |
| avalon-extension/ | 01-Nov-2005 | 82.1 K |
| avalon-framework/ | 01-Nov-2005 | 6.1 M |
| avalon-http/ | 19-Jul-2006 | 27.0 K |
| avalon-logging/ | 01-Nov-2005 | 175.8 K |
| avalon-logkit/ | 01-Nov-2005 | 248.5 K |
| avalon-meta/ | 01-Nov-2005 | 658.9 K |
| avalon-phoenix/ | 01-Nov-2005 | 284.7 K |
| avalon-repository/ | 01-Nov-2005 | 650.2 K |
| avalon-util/ | 01-Nov-2005 | 241.7 K |
| avalon/ | 20-Oct-2006 | 868.7 K |
| axion/ | 01-Nov-2005 | 1.2 M |
| axis/ | 20-Oct-2006 | 26.9 M |
| axis2/ | 05-May-2006 | 12.8 M |
| azote/ | 01-Nov-2005 | 47.4 K |
| backport-util-concurrent/ | 20-Feb-2008 | 5.1 M |
| backport175/ | 01-Nov-2005 | 4.6 M |
| barsuift/ | 27-May-2010 | 8.7 M |
| batik/ | 01-Nov-2005 | 11.2 M |
| bcel/ | 28-Oct-2005 | 1.7 M |
| be/ | 19-Aug-2013 | 29.7 M |
| beehive/ | 01-Nov-2005 | 5.1 M |
| berkano/ | 01-Nov-2005 | 27.7 M |
| berkeleydb/ | 01-Nov-2005 | 6.8 M |
| binky/ | 25-Feb-2010 | 801.2 K |
| biz/ | 11-Apr-2013 | 55.3 M |
| blissed/ | 01-Nov-2005 | 1.0 M |
| boo/ | 06-Nov-2006 | 219.9 M |
| bouncycastle/ | 03-Sep-2009 | 45.3 M |
| boxstuff/ | 01-Nov-2005 | 29.1 K |
| bsf/ | 01-Nov-2005 | 534.0 K |
| bsh/ | 01-Nov-2005 | 1.2 M |
| burlap/ | 01-Nov-2005 | 79.6 K |
| by/ | 01-Nov-2012 | 122.3 M |
| c10n/ | 05-Mar-2013 | 315.5 K |
| c3p0/ | 01-Nov-2005 | 5.9 M |
| ca/ | 14-Aug-2013 | 2.8 G |
| cactus/ | 12-Apr-2008 | 41.7 M |
| cargo/ | 01-Nov-2005 | 2.7 M |
| cas/ | 23-Jun-2006 | 255.3 K |
| castor/ | 06-Dec-2007 | 202.0 M |
| cc/ | 02-Jul-2013 | 171.8 M |
| cewolf/ | 01-Nov-2005 | 515.9 K |
| cglib/ | 11-May-2011 | 19.0 M |
| ch/ | 09-Aug-2013 | 456.5 M |
| charlotte/ | 01-Nov-2005 | 130.6 K |
| checkstyle/ | 28-Oct-2005 | 12.1 M |
| classworlds/ | 20-May-2010 | 5.3 M |
| clickstream/ | 24-Nov-2005 | 9.7 K |
| clirr/ | 01-Nov-2005 | 36.0 K |
| clover/ | 01-Nov-2005 | 17.1 M |
| cmsdeploy/ | 07-Dec-2005 | 749 B |
| cn/ | 19-Sep-2013 | 2.1 M |
| co/ | 08-Aug-2013 | 18.5 M |
| cobertura/ | 07-Feb-2006 | 526.7 K |
| coconut/ | 01-Nov-2005 | 1.8 M |
| cocoon/ | 10-Jun-2008 | 203.4 M |
| code/ | 20-May-2010 | 1.5 M |
| code316/ | 01-Nov-2005 | 49.9 K |
| codehaus/ | 17-Jul-2008 | 0 B |
| colt/ | 01-Nov-2005 | 1.6 M |
| com/ | 20-Sep-2013 | 142.2 G |
| commons-attributes/ | 04-Jul-2006 | 348.0 K |
| commons-beanutils/ | 25-Mar-2010 | 14.1 M |
| commons-betwixt/ | 01-Nov-2005 | 3.5 M |
| commons-chain/ | 09-Mar-2013 | 1.2 M |
| commons-cli/ | 09-Mar-2013 | 786.4 K |
| commons-codec/ | 09-Mar-2013 | 10.3 M |
| commons-collections/ | 09-Mar-2013 | 15.9 M |
| commons-compress/ | 01-Nov-2005 | 124.7 K |
| commons-configuration/ | 09-Mar-2013 | 26.6 M |
| commons-daemon/ | 09-Mar-2013 | 11.2 M |
| commons-dbcp/ | 09-Mar-2013 | 4.1 M |
| commons-dbutils/ | 09-Mar-2013 | 5.1 M |
| commons-digester/ | 09-Mar-2013 | 14.4 M |
| commons-discovery/ | 09-Mar-2013 | 1.4 M |
| commons-el/ | 28-Oct-2005 | 495.0 K |
| commons-email/ | 09-Mar-2013 | 939.2 K |
| commons-fileupload/ | 09-Mar-2013 | 4.3 M |
| commons-grafolia/ | 01-Nov-2005 | 0 B |
| commons-grant/ | 01-Nov-2005 | 71.4 K |
| commons-graph/ | 01-Nov-2005 | 148.5 K |
| commons-http/ | 01-Nov-2005 | 5.8 K |
| commons-httpclient/ | 20-May-2010 | 21.6 M |
| commons-i18n/ | 01-Nov-2005 | 7.2 M |
| commons-io/ | 09-Mar-2013 | 17.0 M |
| commons-jdbc2pool/ | 01-Nov-2005 | 467 B |
| commons-jelly/ | 20-May-2010 | 42.7 M |
| commons-jexl/ | 01-Nov-2005 | 10.3 M |
| commons-jux/ | 01-Nov-2005 | 6.4 K |
| commons-jxpath/ | 09-Mar-2013 | 4.3 M |
| commons-lang/ | 09-Mar-2013 | 12.3 M |
| commons-latka/ | 01-Nov-2005 | 152.2 K |
| commons-launcher/ | 04-Jul-2006 | 247.9 K |
| commons-logging/ | 14-Mar-2013 | 6.6 M |
| commons-math/ | 09-Mar-2013 | 6.5 M |
| commons-messenger/ | 01-Nov-2005 | 1.1 M |
| commons-modeler/ | 01-Nov-2005 | 1.0 M |
| commons-naming/ | 01-Nov-2005 | 128.3 K |
| commons-net/ | 09-Mar-2013 | 27.0 M |
| commons-pool/ | 09-Mar-2013 | 6.7 M |
| commons-primitives/ | 01-Nov-2005 | 1.5 M |
| commons-resources/ | 01-Nov-2005 | 49.5 K |
| commons-scxml/ | 09-Mar-2013 | 2.7 M |
| commons-services/ | 28-Oct-2005 | 461 B |
| commons-sql/ | 01-Nov-2005 | 311.1 K |
| commons-test/ | 08-Nov-2005 | 16.1 K |
| commons-threadpool/ | 01-Nov-2005 | 7.2 K |
| commons-transaction/ | 01-Nov-2005 | 925.7 K |
| commons-util/ | 01-Nov-2005 | 26.7 K |
| commons-validator/ | 28-Oct-2005 | 6.6 M |
| commons-vfs/ | 01-Nov-2005 | 1.1 M |
| commons-xo/ | 01-Nov-2005 | 31.8 K |
| concurrent/ | 28-Oct-2005 | 1.7 M |
| continuum/ | 01-Nov-2005 | 2.4 K |
| controlhaus/ | 01-Nov-2005 | 186.7 M |
| cornerstone-connection/ | 01-Nov-2005 | 54.6 K |
| cornerstone-datasources/ | 01-Nov-2005 | 31.8 K |
| cornerstone-scheduler/ | 01-Nov-2005 | 61.4 K |
| cornerstone-sockets/ | 01-Nov-2005 | 50.8 K |
| cornerstone-store/ | 01-Nov-2005 | 97.0 K |
| cornerstone-threads/ | 01-Nov-2005 | 52.1 K |
| cos/ | 07-Dec-2005 | 1.6 K |
| crimson/ | 01-Nov-2005 | 201.2 K |
| cryptix/ | 01-Nov-2005 | 473.9 K |
| cssparser/ | 20-May-2010 | 112.7 K |
| cz/ | 09-Aug-2013 | 22.3 M |
| d-haven-event/ | 01-Nov-2005 | 134.9 K |
| d-haven-eventbus/ | 01-Nov-2005 | 15.3 K |
| d-haven-mpool/ | 01-Nov-2005 | 23.4 K |
| dalma/ | 19-Aug-2011 | 1.4 M |
| dalms/ | 19-Aug-2011 | 9.9 K |
| damagecontrol/ | 01-Nov-2005 | 156.2 M |
| dataforge/ | 01-Nov-2005 | 0 B |
| datasift/ | 01-Nov-2005 | 181.9 K |
| dbunit/ | 01-Nov-2005 | 1.2 M |
| de/ | 20-Sep-2013 | 5.0 G |
| decorutils/ | 01-Nov-2005 | 53.4 K |
| dentaku/ | 01-Nov-2005 | 70.1 M |
| directory-asn1/ | 01-Nov-2005 | 668.3 K |
| directory-authx/ | 01-Nov-2005 | 0 B |
| directory-clients/ | 01-Nov-2005 | 67.9 K |
| directory-naming/ | 01-Nov-2005 | 140.1 K |
| directory-network/ | 01-Nov-2005 | 2.2 M |
| directory-protocols/ | 01-Nov-2005 | 152.0 K |
| directory-shared/ | 01-Nov-2005 | 2.4 M |
| directory/ | 25-Dec-2005 | 40.8 M |
| displaytag/ | 12-Aug-2008 | 14.3 M |
| ditchnet/ | 24-Nov-2005 | 28.3 K |
| dk/ | 17-May-2013 | 76.1 M |
| dna/ | 01-Nov-2005 | 15.6 M |
| dnsjava/ | 03-Nov-2010 | 17.2 M |
| docbook/ | 17-Jun-2006 | 14.0 M |
| doccheck/ | 01-Nov-2005 | 27.8 K |
| dom4j/ | 01-Nov-2005 | 8.7 M |
| domify/ | 04-Oct-2010 | 37.8 K |
| doxia/ | 28-Oct-2005 | 2.2 M |
| drone/ | 01-Nov-2005 | 67.0 M |
| drools-examples/ | 01-Nov-2005 | 14.3 K |
| drools/ | 01-Feb-2007 | 468.0 M |
| dsh-vocabulary/ | 01-Nov-2005 | 42.1 K |
| dtdparser/ | 01-Nov-2005 | 45.7 K |
| dumbster/ | 01-Nov-2005 | 46.9 K |
| dwr/ | 24-Nov-2005 | 1.7 M |
| dynaop/ | 01-Nov-2005 | 86.0 K |
| easyconf/ | 01-Nov-2005 | 190.2 K |
| easymock/ | 28-Oct-2005 | 655.8 K |
| echo/ | 01-Nov-2005 | 330.5 K |
| echo3/ | 20-May-2010 | 376 B |
| echo3extras/ | 20-May-2010 | 388 B |
| eclipse/ | 01-Nov-2005 | 15.7 M |
| ecs/ | 01-Nov-2005 | 751.4 K |
| edenlib/ | 01-Nov-2005 | 144.2 K |
| edtftp/ | 01-Nov-2005 | 35.7 K |
| edu/ | 29-Aug-2013 | 6.2 G |
| ehcache/ | 28-Oct-2005 | 403.2 K |
| ejb/ | 07-Dec-2005 | 0 B |
| el-impl/ | 19-Aug-2011 | 163.5 K |
| emberio/ | 01-Nov-2005 | 184.6 K |
| emma/ | 18-Oct-2010 | 11.0 M |
| ervacon/ | 01-Nov-2005 | 106.3 K |
| es/ | 19-Feb-2013 | 221.0 M |
| esper/ | 29-Jan-2008 | 465.2 M |
| eu/ | 29-Aug-2013 | 471.3 M |
| excalibur-altrmi/ | 01-Nov-2005 | 422.8 K |
| excalibur-cli/ | 01-Nov-2005 | 24.5 K |
| excalibur-collections/ | 01-Nov-2005 | 65.3 K |
| excalibur-component-examples/ | 01-Nov-2005 | 14.7 K |
| excalibur-component-tests/ | 01-Nov-2005 | 15.8 K |
| excalibur-component/ | 01-Nov-2005 | 455.1 K |
| excalibur-concurrent/ | 01-Nov-2005 | 30.4 K |
| excalibur-configuration/ | 01-Nov-2005 | 1.5 M |
| excalibur-containerkit/ | 01-Nov-2005 | 87.8 K |
| excalibur-datasource/ | 01-Nov-2005 | 292.7 K |
| excalibur-event/ | 01-Nov-2005 | 1.6 M |
| excalibur-extension/ | 01-Nov-2005 | 27.3 K |
| excalibur-fortress/ | 01-Nov-2005 | 1.1 M |
| excalibur-i18n/ | 01-Nov-2005 | 528.3 K |
| excalibur-instrument-manager-interfaces/ | 01-Nov-2005 | 46.8 K |
| excalibur-instrument-manager/ | 01-Nov-2005 | 345.2 K |
| excalibur-instrument/ | 01-Nov-2005 | 441.0 K |
| excalibur-io/ | 01-Nov-2005 | 40.9 K |
| excalibur-lifecycle/ | 01-Nov-2005 | 72.7 K |
| excalibur-logger/ | 01-Nov-2005 | 384.1 K |
| excalibur-monitor/ | 01-Nov-2005 | 99.2 K |
| excalibur-mpool/ | 01-Nov-2005 | 17.6 K |
| excalibur-naming/ | 01-Nov-2005 | 65.5 K |
| excalibur-pool/ | 01-Nov-2005 | 290.3 K |
| excalibur-sourceresolve/ | 01-Nov-2005 | 392.5 K |
| excalibur-store/ | 01-Nov-2005 | 115.0 K |
| excalibur-thread/ | 01-Nov-2005 | 433.6 K |
| excalibur-util/ | 01-Nov-2005 | 95.6 K |
| excalibur-xmlutil/ | 01-Nov-2005 | 252.0 K |
| excalibur/ | 01-Nov-2005 | 1.5 M |
| exist/ | 01-Nov-2005 | 979.3 K |
| exml/ | 01-Nov-2005 | 119.6 K |
| exo/ | 01-Nov-2005 | 16.0 M |
| exolabcore/ | 01-Nov-2005 | 594.8 K |
| exteca/ | 01-Nov-2005 | 436.0 K |
| fastutil/ | 01-Nov-2005 | 97.4 M |
| fesi/ | 01-Nov-2005 | 1.2 M |
| fi/ | 29-Aug-2013 | 65.2 M |
| findbugs/ | 06-Nov-2006 | 16.3 M |
| flox/ | 01-Nov-2005 | 54.2 K |
| flux/ | 13-Dec-2010 | 420.9 K |
| fm/ | 16-May-2012 | 26.4 M |
| fop/ | 01-Nov-2005 | 11.4 M |
| forehead/ | 01-Nov-2005 | 64.6 K |
| formproc/ | 01-Nov-2005 | 89.0 K |
| foxtrot/ | 06-Nov-2011 | 553.4 K |
| fr/ | 16-Sep-2013 | 398.9 M |
| freebxml/ | 01-Nov-2005 | 619.0 K |
| freemarker/ | 01-Nov-2005 | 5.9 M |
| fulcrum/ | 01-Nov-2005 | 1.4 M |
| gabriel/ | 01-Nov-2005 | 2.4 M |
| gbean/ | 01-Nov-2005 | 0 B |
| generama/ | 18-Jul-2008 | 1.9 M |
| genjar/ | 01-Nov-2005 | 31.8 K |
| genjava/ | 01-Nov-2005 | 4.0 M |
| geronimo-spec/ | 01-Nov-2005 | 5.5 M |
| geronimo/ | 09-Jan-2007 | 208.9 M |
| gg/ | 08-May-2012 | 109.8 K |
| glassfish/ | 19-Aug-2011 | 3.3 K |
| gnu-regexp/ | 01-Nov-2005 | 30.7 K |
| gnu/ | 20-May-2010 | 117.3 K |
| gov/ | 15-Aug-2012 | 159.8 M |
| gr/ | 08-Jan-2013 | 11.8 M |
| graphlayout/ | 01-Nov-2005 | 107.8 K |
| grizzly-cachetest/ | 13-Feb-2009 | 4.5 M |
| grizzly/ | 19-Aug-2011 | 31.1 M |
| groovy-xmlrpc/ | 27-May-2006 | 0 B |
| groovy/ | 01-May-2007 | 359.6 M |
| gs/ | 08-Sep-2012 | 2.1 M |
| gsbase/ | 01-Nov-2005 | 283.7 K |
| hessian/ | 01-Nov-2005 | 513.4 K |
| hibernate/ | 26-Dec-2008 | 43.8 M |
| hivemind/ | 01-Nov-2005 | 5.8 M |
| howl/ | 01-Nov-2005 | 262.6 K |
| hsqldb/ | 28-Oct-2005 | 8.1 M |
| htmlunit/ | 01-Nov-2005 | 7.5 M |
| httpcomponents-httpcore/ | 03-Jul-2007 | 1.2 M |
| httpunit/ | 19-May-2010 | 5.6 M |
| hu/ | 24-Apr-2013 | 7.4 M |
| hudson/ | 15-Dec-2010 | 78.2 M |
| ical4j/ | 01-Nov-2005 | 2.7 M |
| icu/ | 03-Nov-2005 | 564 B |
| icu4j/ | 04-Nov-2005 | 571 B |
| idb/ | 01-Nov-2005 | 231.6 K |
| ie/ | 20-May-2010 | 98.4 K |
| iirekm/ | 19-May-2010 | 5.1 K |
| il/ | 20-Mar-2012 | 99.7 K |
| in/ | 20-Sep-2013 | 4.9 M |
| info/ | 10-May-2013 | 588.7 M |
| informa/ | 01-Nov-2005 | 182.0 K |
| innig/ | 01-Nov-2005 | 322.5 K |
| io/ | 29-Aug-2013 | 5.3 G |
| isorelax/ | 01-Nov-2005 | 385.4 K |
| it/ | 21-Jul-2013 | 7.2 G |
| itext/ | 01-Nov-2005 | 8.7 M |
| ivory/ | 01-Nov-2005 | 3.3 M |
| izpack/ | 01-Nov-2005 | 6.1 M |
| jaas/ | 01-Nov-2005 | 892 B |
| jackcess/ | 01-Nov-2005 | 565.7 K |
| jackson/ | 06-Sep-2008 | 4.2 M |
| jacl/ | 01-Nov-2005 | 718.2 K |
| jaf/ | 28-Oct-2005 | 994 B |
| jaimbot/ | 01-Nov-2005 | 88.0 K |
| jakarta-regexp/ | 01-Nov-2005 | 29.0 K |
| jalopy/ | 01-Nov-2005 | 7.0 M |
| james/ | 01-Nov-2005 | 1.1 M |
| janino/ | 01-Nov-2005 | 9.2 M |
| jardiff/ | 14-Feb-2006 | 773.1 K |
| jarjar/ | 01-Nov-2005 | 225.3 K |
| jarsync/ | 01-Nov-2005 | 58.5 K |
| jasper-jsr199/ | 19-Aug-2011 | 7.1 K |
| jasperreports/ | 01-Nov-2005 | 92.4 M |
| java2html/ | 01-Nov-2005 | 601.0 K |
| java3d/ | 01-Nov-2005 | 4.0 M |
| javacc/ | 01-Nov-2005 | 860.9 K |
| javaconfig/ | 01-Nov-2005 | 47.4 K |
| javadb/ | 20-Mar-2013 | 116.9 M |
| javadoc/ | 01-Nov-2005 | 1.3 K |
| javaee/ | 19-Aug-2011 | 697.5 K |
| javagroups/ | 01-Nov-2005 | 2.8 M |
| javainetlocator/ | 01-Nov-2005 | 260.1 K |
| javamail/ | 01-Nov-2005 | 3.4 K |
| javancss/ | 01-Nov-2005 | 3.5 M |
| javanettasks/ | 19-Aug-2011 | 122.4 M |
| javassist / | 05-Apr-2008 | 0 B |
| javassist/ | 17-Apr-2010 | 14.1 M |
| javatar/ | 01-Nov-2005 | 25.8 K |
| javax/ | 30-Mar-2012 | 518.5 M |
| javazoom/ | 09-Nov-2012 | 572.3 K |
| javolution/ | 16-Aug-2011 | 9.5 M |
| jawin/ | 24-Nov-2005 | 198.6 K |
| jaxb/ | 19-Aug-2011 | 102.6 K |
| jaxen/ | 13-Dec-2013 | 54.1 M |
| jaxme/ | 06-Nov-2006 | 16.2 M |
| jaxr-ra/ | 20-May-2010 | 29.5 K |
| jblanket/ | 01-Nov-2005 | 127.5 K |
| jboss/ | 23-Apr-2013 | 49.3 M |
| jca/ | 01-Nov-2005 | 1.8 K |
| jcache/ | 01-Nov-2005 | 109.2 K |
| jcharts/ | 16-Mar-2012 | 953.2 K |
| jcifs/ | 23-Mar-2012 | 3.1 M |
| jcom/ | 24-Nov-2005 | 56.0 K |
| jcommon/ | 28-Oct-2005 | 2.1 M |
| jcoverage/ | 01-Nov-2005 | 201.4 K |
| jcs-javagroups/ | 01-Nov-2005 | 8.4 K |
| jcs/ | 01-Nov-2005 | 722.0 K |
| jcvsii/ | 01-Nov-2005 | 561.6 K |
| jdbc/ | 28-Oct-2005 | 23.1 K |
| jdbm/ | 01-Nov-2005 | 328.2 K |
| jdepend/ | 01-Nov-2005 | 317.5 K |
| jdiff/ | 01-Nov-2005 | 254.2 K |
| jdo/ | 01-Nov-2005 | 136.1 K |
| jdom/ | 28-Oct-2005 | 1.3 M |
| jdring/ | 01-Nov-2005 | 7.6 K |
| jdsl/ | 01-Nov-2005 | 132.7 K |
| jen/ | 19-Aug-2011 | 898.9 K |
| jencks/ | 01-Nov-2005 | 7.7 M |
| jep/ | 01-Nov-2005 | 56.5 K |
| jepi/ | 19-Aug-2011 | 26.1 K |
| jersey/ | 19-Aug-2011 | 7.3 M |
| jetty/ | 21-Dec-2012 | 84.8 M |
| jexcelapi/ | 06-Nov-2006 | 1.7 M |
| jface/ | 01-Nov-2005 | 60.9 K |
| jfree/ | 26-Sep-2011 | 64.1 M |
| jfreechart/ | 01-Nov-2005 | 6.0 M |
| jgen/ | 01-Nov-2005 | 389 B |
| jgoodies/ | 01-Nov-2005 | 1.3 M |
| jgraph/ | 01-Nov-2005 | 4.7 M |
| jgrapht/ | 01-Nov-2005 | 168.7 K |
| jgroups/ | 19-Apr-2010 | 187.7 M |
| jhunlang/ | 01-Nov-2005 | 885.8 K |
| jini/ | 10-Dec-2005 | 1.2 M |
| jintention/ | 19-May-2010 | 46.2 K |
| jisp/ | 01-Nov-2005 | 91.3 K |
| jivesoftware/ | 01-Nov-2005 | 2.8 M |
| jlibdiff/ | 01-Nov-2005 | 47.0 K |
| jline/ | 21-May-2011 | 4.9 M |
| jmagick/ | 28-Feb-2013 | 378.9 K |
| jmaki/ | 19-Aug-2011 | 34.9 M |
| jmdns/ | 01-Nov-2005 | 228.1 K |
| jmimemagic/ | 01-Nov-2005 | 200.1 K |
| jmml/ | 01-Nov-2005 | 32.5 K |
| jmock/ | 28-Oct-2005 | 6.2 M |
| jms/ | 28-Oct-2005 | 1.9 K |
| jmscts/ | 01-Nov-2005 | 1.4 M |
| jmsn/ | 01-Nov-2005 | 87.3 K |
| joda-time/ | 17-Aug-2013 | 31.0 M |
| john-test/ | 29-May-2008 | 8.6 M |
| jotm/ | 01-Nov-2005 | 504.8 K |
| jp/ | 26-Dec-2012 | 48.0 M |
| jparsec/ | 15-Oct-2012 | 3.5 M |
| jpl/ | 09-Nov-2012 | 556.6 K |
| jpox-dbcp/ | 14-Mar-2007 | 14.1 K |
| jpox-enhancer/ | 14-Mar-2007 | 170.6 K |
| jpox-java5/ | 14-Mar-2007 | 67.3 K |
| jpox/ | 21-Jan-2008 | 77.3 M |
| jrexx/ | 01-Nov-2005 | 99.5 K |
| jrms/ | 01-Nov-2005 | 618.6 K |
| jrobin/ | 01-Nov-2005 | 174.2 K |
| jruby/ | 22-Aug-2007 | 99.2 M |
| jsch/ | 28-Oct-2005 | 1.5 M |
| jsf-extensions/ | 19-Aug-2011 | 26.1 K |
| jspapi/ | 28-Oct-2005 | 102.6 K |
| jsptags/ | 01-Nov-2005 | 48.4 K |
| jstl/ | 19-Aug-2011 | 651.8 K |
| jstyle/ | 01-Nov-2005 | 18.6 K |
| jta/ | 28-Oct-2005 | 1.0 K |
| jtds/ | 20-Jan-2006 | 1.0 K |
| jtidy/ | 28-Oct-2005 | 330.8 K |
| juddi/ | 01-Nov-2005 | 0 B |
| jug/ | 01-Nov-2005 | 70.5 K |
| jung/ | 01-Nov-2005 | 11.6 M |
| junit-addons/ | 28-Oct-2005 | 54.7 K |
| junit-doclet/ | 01-Nov-2005 | 77.5 K |
| junit/ | 05-Oct-2010 | 13.6 M |
| junitperf/ | 01-Nov-2005 | 28.9 K |
| juno/ | 19-Aug-2011 | 31.5 K |
| jwebunit/ | 01-Nov-2005 | 91.0 K |
| jxta/ | 01-Nov-2005 | 1.5 M |
| jython/ | 01-Nov-2005 | 4.4 M |
| kawa/ | 01-Nov-2005 | 1.3 M |
| kg/ | 20-Feb-2013 | 3.6 M |
| kohsuke/ | 19-Aug-2011 | 18.3 K |
| kxml/ | 01-Nov-2005 | 11.1 K |
| kxml2/ | 01-Nov-2005 | 32.5 K |
| ldapd-common/ | 01-Nov-2005 | 1.3 M |
| ldapsdk/ | 01-Nov-2005 | 257.8 K |
| li/ | 30-Aug-2013 | 1.1 M |
| lingo/ | 01-Nov-2005 | 7.3 M |
| locc/ | 01-Nov-2005 | 309.8 K |
| log4j/ | 20-Apr-2010 | 28.5 M |
| log4unit/ | 01-Nov-2005 | 63.6 K |
| logkit/ | 02-Nov-2005 | 3.1 M |
| loom/ | 01-Nov-2005 | 42.3 M |
| lt/ | 15-Jan-2013 | 640.3 K |
| lucene/ | 01-Nov-2005 | 1.8 M |
| ma/ | 15-Jan-2012 | 75.1 M |
| magicGball/ | 01-Nov-2005 | 12.4 K |
| maps/ | 20-May-2010 | 200.8 K |
| marmalade/ | 22-Jul-2006 | 1.4 M |
| maven-integration-test-helper/ | 09-Jun-2011 | 0 B |
| maven-javanet-plugin/ | 19-Aug-2011 | 1.1 M |
| maven-new/ | 01-Nov-2005 | 19.2 K |
| maven-plugins/ | 06-Nov-2006 | 52.3 M |
| maven-proxy/ | 01-Nov-2005 | 4.7 M |
| maven-taglib/ | 01-Nov-2005 | 834.6 K |
| maven-torque-plugin/ | 01-Nov-2005 | 483 B |
| maven-validator/ | 01-Nov-2005 | 817.1 K |
| maven-xdoclet2-plugin/ | 01-Nov-2005 | 0 B |
| maven/ | 06-Nov-2006 | 84.4 M |
| maxq/ | 01-Nov-2005 | 35.6 K |
| mckoi/ | 01-Nov-2005 | 1.7 M |
| me/ | 05-Sep-2013 | 306.4 M |
| merlin-developer/ | 01-Nov-2005 | 79.5 K |
| merlin-tutorial/ | 01-Nov-2005 | 12.7 K |
| merlin/ | 01-Nov-2005 | 281.6 K |
| messenger/ | 01-Nov-2005 | 83.8 K |
| metaclass/ | 01-Nov-2005 | 7.7 M |
| mevenide/ | 01-Nov-2005 | 39.2 M |
| microcontainer/ | 01-Nov-2005 | 0 B |
| middlegen/ | 01-Nov-2005 | 551.3 K |
| milyn/ | 17-May-2007 | 26.5 M |
| mm-mysql/ | 01-Nov-2005 | 236.0 K |
| mm/ | 01-Nov-2005 | 236.1 K |
| mockcreator/ | 01-Nov-2005 | 104.6 K |
| mockit/ | 20-May-2010 | 9.8 M |
| mockmaker/ | 01-Nov-2005 | 20.9 K |
| mockobjects/ | 01-Nov-2005 | 1.3 M |
| mockrunner/ | 24-Nov-2005 | 404.4 K |
| modello/ | 01-Nov-2005 | 2.4 K |
| mrj/ | 01-Nov-2005 | 18.9 K |
| mstor/ | 01-Nov-2005 | 232.2 K |
| msv/ | 01-Nov-2005 | 6.5 M |
| mule/ | 10-Apr-2007 | 658.7 M |
| muse/ | 01-Nov-2005 | 1.0 M |
| mx/ | 04-Jun-2013 | 16.6 M |
| mx4j/ | 01-Nov-2005 | 7.8 M |
| myfaces/ | 21-Nov-2005 | 12.0 M |
| mysql/ | 06-Oct-2007 | 198.8 M |
| name/ | 10-Sep-2013 | 10.2 M |
| nanning/ | 01-Nov-2005 | 331.4 K |
| nanocontainer/ | 14-Jun-2006 | 57.0 M |
| nekohtml/ | 02-Jun-2008 | 2.4 M |
| neo/ | 01-Nov-2005 | 20.6 M |
| net/ | 16-Sep-2013 | 35.1 G |
| netbeans/ | 01-Nov-2005 | 1.5 M |
| new/ | 20-May-2010 | 92.1 K |
| nf/ | 04-Jan-2012 | 227.7 K |
| nl/ | 26-Jul-2013 | 1.7 G |
| no/ | 01-May-2013 | 257.1 M |
| norbert/ | 01-Nov-2005 | 477.4 K |
| nsuml/ | 01-Nov-2005 | 3.0 M |
| nu/ | 08-Jun-2012 | 22.7 M |
| nz/ | 22-May-2012 | 316.3 M |
| oauth/ | 28-Jan-2010 | 2.1 M |
| odmg/ | 28-Oct-2005 | 14.2 K |
| ognl/ | 15-Dec-2010 | 15.1 M |
| ojb/ | 01-Nov-2005 | 15.5 M |
| ojdbc/ | 28-Oct-2005 | 725 B |
| old/ | 01-Nov-2005 | 2.2 M |
| oness/ | 01-Nov-2005 | 386.8 K |
| open-esb/ | 19-Aug-2011 | 29.5 K |
| open/ | 20-May-2010 | 111.3 K |
| openejb/ | 07-May-2006 | 392.6 M |
| openim/ | 01-Nov-2005 | 1.3 M |
| openjms/ | 01-Nov-2005 | 3.9 M |
| opennms/ | 01-Nov-2005 | 557.1 K |
| opensymphony/ | 19-Feb-2009 | 86.9 M |
| oracle/ | 19-Aug-2011 | 12.1 K |
| org/ | 08-Mar-2013 | 731.5 G |
| oro/ | 28-Oct-2005 | 617.1 K |
| oscube/ | 01-Nov-2005 | 1.1 M |
| p2psockets/ | 01-Nov-2005 | 29.5 K |
| p6spy/ | 13-Nov-2013 | 2.3 M |
| patterntesting/ | 01-Nov-2005 | 10.5 K |
| payload/ | 01-Nov-2005 | 407.3 K |
| pcj/ | 01-Nov-2005 | 2.6 M |
| pdfbox/ | 01-Nov-2005 | 7.6 M |
| penguin/ | 01-Nov-2005 | 32.6 K |
| petridish/ | 01-Nov-2005 | 801 B |
| ph/ | 21-Jun-2012 | 3.4 M |
| piccolo/ | 01-Nov-2005 | 115.1 K |
| picocontainer/ | 14-Jun-2006 | 35.0 M |
| picounit/ | 01-Nov-2005 | 2.9 M |
| pircbot/ | 08-Apr-2011 | 3.4 M |
| pl/ | 16-Sep-2013 | 234.1 M |
| plexus/ | 05-Jan-2007 | 12.2 M |
| plj/ | 01-Nov-2005 | 1.1 M |
| plugin/ | 01-Nov-2005 | 0 B |
| pluto-container/ | 01-Nov-2005 | 113.2 K |
| pmd/ | 12-Nov-2011 | 73.2 M |
| pnuts/ | 11-Oct-2010 | 608.0 K |
| poi/ | 29-Oct-2005 | 20.0 M |
| poolman/ | 01-Nov-2005 | 89.0 K |
| portlet-api/ | 01-Nov-2005 | 17.9 K |
| postgresql/ | 05-Oct-2010 | 17.7 M |
| prevayler/ | 01-Nov-2005 | 4.2 M |
| pro/ | 15-Feb-2013 | 7.0 M |
| proctor/ | 19-Aug-2011 | 2.7 M |
| profiler/ | 01-Nov-2005 | 9.8 K |
| proxool/ | 28-Oct-2005 | 466.0 K |
| proxytoys/ | 01-Nov-2005 | 2.3 M |
| pt/ | 08-Jul-2013 | 456.6 K |
| pubscribe/ | 01-Nov-2005 | 1.1 M |
| pull-parser/ | 28-Oct-2005 | 157.3 K |
| qdox/ | 28-Oct-2005 | 3.4 M |
| qfork/ | 01-Nov-2005 | 0 B |
| quartz-jboss/ | 25-Feb-2010 | 1.6 K |
| quartz-oracle/ | 25-Feb-2010 | 1.1 K |
| quartz-weblogic/ | 25-Feb-2010 | 1.3 K |
| quartz/ | 01-Nov-2005 | 4.1 M |
| quilt/ | 01-Nov-2005 | 259.3 K |
| radeox/ | 01-Nov-2005 | 677.3 K |
| readline/ | 01-Nov-2005 | 453 B |
| redhill/ | 01-Nov-2005 | 288.1 K |
| redis/ | 06-Oct-2010 | 6.4 M |
| redmine/ | 20-May-2010 | 821.1 K |
| regexp/ | 20-Oct-2006 | 109.8 K |
| relaxngDatatype/ | 01-Nov-2005 | 31.6 K |
| reportrunner/ | 01-Nov-2005 | 315.1 K |
| rhino/ | 01-Nov-2005 | 12.7 M |
| ro/ | 29-Aug-2013 | 255.4 M |
| robo-guice/ | 20-May-2010 | 536 B |
| roboguice/ | 20-May-2010 | 167.5 K |
| roller/ | 20-May-2010 | 89.5 K |
| rome/ | 19-Aug-2011 | 8.8 M |
| rs/ | 01-Dec-2012 | 193.6 K |
| rss4j/ | 01-Nov-2005 | 46.0 K |
| rsslibj/ | 01-Nov-2005 | 20.3 K |
| ru/ | 05-Sep-2013 | 142.9 M |
| sablecc/ | 01-Nov-2005 | 1.7 M |
| sax/ | 01-Nov-2005 | 28.3 K |
| saxon/ | 20-Oct-2006 | 1.9 M |
| saxpath/ | 28-Oct-2005 | 160.7 K |
| scout/ | 29-Oct-2005 | 76.5 K |
| scraping-engine/ | 01-Nov-2005 | 3.0 M |
| se/ | 05-Sep-2013 | 2.5 G |
| securityfilter/ | 01-Nov-2005 | 96.9 K |
| servicemix-ws/ | 01-Nov-2005 | 0 B |
| servicemix/ | 25-Mar-2006 | 342.3 M |
| servletapi/ | 29-Oct-2005 | 696.3 K |
| servlets/ | 01-Nov-2005 | 118.7 K |
| setpoint/ | 06-Nov-2006 | 193.8 K |
| sfx4j/ | 19-Aug-2011 | 517.5 K |
| shellix/ | 20-May-2010 | 789 B |
| shocks/ | 01-Nov-2005 | 9.1 M |
| sillyexceptions/ | 01-Nov-2005 | 5.6 K |
| simple-jms/ | 09-Dec-2005 | 373.5 K |
| simple-jndi/ | 01-Nov-2005 | 3.1 M |
| sk/ | 27-Feb-2013 | 453.4 M |
| skaringa/ | 01-Nov-2005 | 89.2 K |
| skinlf/ | 01-Nov-2005 | 383.4 K |
| slide/ | 01-Nov-2005 | 5.9 M |
| smartrics/ | 05-Oct-2012 | 6.4 M |
| soap/ | 01-Nov-2005 | 848.4 K |
| soimp/ | 19-Aug-2011 | 15.7 K |
| solarisrealm/ | 20-May-2010 | 85.1 K |
| speexx/ | 01-Nov-2005 | 501.6 K |
| spice/ | 01-Nov-2005 | 8.9 M |
| spring/ | 01-Nov-2005 | 2.0 M |
| springframework/ | 01-Nov-2005 | 85.1 M |
| springmodules/ | 20-Jun-2006 | 346.4 K |
| sshtools/ | 20-May-2010 | 1.5 M |
| sslext/ | 01-Nov-2005 | 94.3 K |
| stapler/ | 19-Aug-2011 | 77.5 K |
| statcvs/ | 01-Nov-2005 | 2.5 M |
| stax-utils/ | 01-Nov-2005 | 112.4 K |
| stax/ | 06-Nov-2006 | 1.6 M |
| stratum/ | 01-Nov-2005 | 5.6 M |
| struts-menu/ | 01-Nov-2005 | 869.9 K |
| struts/ | 01-Nov-2005 | 11.8 M |
| strutstestcase/ | 01-Nov-2005 | 1.1 M |
| stxx/ | 01-Nov-2005 | 245.7 K |
| subpersistence/ | 01-Nov-2005 | 237.3 K |
| subshell/ | 01-Nov-2005 | 57.2 K |
| suiterunner/ | 01-Nov-2005 | 501.9 K |
| surefire/ | 28-Oct-2005 | 695.4 K |
| swarmcache/ | 28-Oct-2005 | 31.6 K |
| swt/ | 01-Nov-2005 | 9.7 M |
| sysunit/ | 01-Nov-2005 | 1.0 M |
| tablelayout/ | 01-Nov-2005 | 107.4 K |
| tagalog/ | 01-Nov-2005 | 31.5 K |
| tagishauth/ | 01-Nov-2005 | 53.1 K |
| taglibrarydoc/ | 01-Nov-2005 | 608.4 K |
| taglibs/ | 01-Nov-2005 | 30.1 M |
| tagsoup/ | 05-Nov-2005 | 599 B |
| tambora/ | 01-Nov-2005 | 4.7 M |
| tanukisoft/ | 07-Mar-2008 | 3.3 M |
| tapestry/ | 01-Nov-2005 | 36.5 M |
| tclib/ | 01-Nov-2005 | 67.4 K |
| textarea/ | 01-Nov-2005 | 66.9 K |
| thaiopensource/ | 20-Oct-2006 | 779.6 K |
| tiffrenderer/ | 01-Nov-2005 | 199.8 K |
| tjdo/ | 01-Nov-2005 | 1.6 M |
| tk/ | 07-Mar-2012 | 677.0 K |
| tl/ | 11-Jul-2013 | 4.2 M |
| tmporb/ | 01-Nov-2005 | 4.2 M |
| to/ | 06-Nov-2012 | 9.9 M |
| tomcat-util/ | 01-Nov-2005 | 843 B |
| tomcat/ | 24-Jan-2008 | 64.4 M |
| tonic/ | 08-Nov-2005 | 141.6 K |
| toplink/ | 19-Aug-2011 | 598.8 M |
| torque-gen/ | 01-Nov-2005 | 429 B |
| torque/ | 12-Jan-2008 | 10.2 M |
| touchstone/ | 01-Nov-2005 | 0 B |
| traer/ | 03-Apr-2012 | 74.4 K |
| trail-taglib/ | 01-Nov-2005 | 196.9 K |
| tranql/ | 01-Nov-2005 | 6.9 M |
| trove/ | 01-Nov-2005 | 999.4 K |
| turbine/ | 01-Nov-2005 | 38.3 M |
| tv/ | 21-Jul-2011 | 113.5 M |
| tw/ | 12-Jun-2013 | 1.3 M |
| tyrex/ | 01-Nov-2005 | 433.0 K |
| ua/ | 06-Aug-2013 | 10.8 M |
| uaihebert/ | 22-Feb-2013 | 832.3 K |
| ubique/ | 01-Nov-2005 | 9.6 K |
| uispec4j/ | 01-Nov-2005 | 2.5 M |
| uk/ | 10-Jan-2013 | 825.2 M |
| urbanophile/ | 01-Nov-2005 | 53.9 K |
| urlrewrite/ | 24-Nov-2005 | 37.3 K |
| us/ | 29-Aug-2013 | 72.3 M |
| vdoclet/ | 01-Nov-2005 | 197.4 K |
| velocity-anakia/ | 30-Apr-2007 | 22.1 K |
| velocity-dvsl/ | 01-Nov-2005 | 4.2 M |
| velocity-tools/ | 21-Dec-2012 | 1.6 M |
| velocity/ | 30-Apr-2007 | 6.2 M |
| village/ | 01-Nov-2005 | 142.9 K |
| vu/ | 20-Jul-2013 | 1.5 M |
| wadi/ | 01-Nov-2005 | 2.3 M |
| webmacro/ | 01-Nov-2005 | 693.8 K |
| webtest/ | 01-Nov-2005 | 395.7 K |
| werken-xpath/ | 28-Oct-2005 | 75.4 K |
| werkflow/ | 01-Nov-2005 | 792.5 K |
| werkz/ | 01-Nov-2005 | 387.7 K |
| westhawk/ | 01-Nov-2005 | 317.6 K |
| which/ | 01-Nov-2005 | 18.1 K |
| wicket/ | 12-Aug-2008 | 156.1 M |
| woodstox/ | 14-Mar-2008 | 40.1 M |
| wrapper/ | 01-Nov-2005 | 30.2 K |
| ws-commons-java5/ | 01-Nov-2005 | 24.3 K |
| ws-commons-util/ | 01-Nov-2005 | 104.3 K |
| ws-commons/ | 19-Sep-2006 | 2.2 M |
| ws-scout/ | 18-Feb-2006 | 146.9 K |
| ws/ | 12-Jan-2013 | 14.8 M |
| wsdl4j/ | 28-Feb-2013 | 3.9 M |
| wsrf/ | 01-Nov-2005 | 4.4 M |
| wss4j/ | 03-May-2006 | 1.0 M |
| wstx/ | 01-Nov-2005 | 1016.4 K |
| wurfl/ | 01-Nov-2005 | 145.8 K |
| wutka/ | 01-Nov-2005 | 56.9 K |
| xajile/ | 03-Aug-2009 | 0 B |
| xalan/ | 30-Sep-2008 | 32.1 M |
| xbean/ | 05-Jan-2006 | 537.6 K |
| xdoclet-plugins/ | 03-Jul-2006 | 7.9 M |
| xdoclet/ | 18-Jul-2008 | 7.0 M |
| xerces/ | 16-Aug-2011 | 55.4 M |
| xercesjarv/ | 01-Nov-2005 | 71.8 K |
| xfire-root/ | 01-Nov-2005 | 4.9 K |
| xfire/ | 06-Nov-2006 | 172.9 M |
| xjavadoc/ | 01-Nov-2005 | 463.1 K |
| xml-apis/ | 20-Aug-2011 | 5.1 M |
| xml-resolver/ | 01-Nov-2005 | 345.3 K |
| xml-security/ | 20-Oct-2006 | 2.1 M |
| xmlbeans/ | 04-Jul-2007 | 28.3 M |
| xmldb/ | 01-Nov-2005 | 96.2 K |
| xmlenc/ | 01-Nov-2005 | 40.2 K |
| xmlmind/ | 01-Nov-2005 | 210.3 K |
| xmlpull/ | 01-Nov-2005 | 48.7 K |
| xmlrpc-helma/ | 01-Nov-2005 | 54.4 K |
| xmlrpc/ | 25-Jun-2006 | 2.2 M |
| xmlunit/ | 08-Feb-2013 | 1.3 M |
| xmlwise/ | 27-Oct-2012 | 81.4 K |
| xmlwriter/ | 01-Nov-2005 | 763.3 K |
| xom/ | 20-Oct-2006 | 3.8 M |
| xpp3/ | 28-Oct-2005 | 3.0 M |
| xsddoc/ | 01-Nov-2005 | 609.9 K |
| xsdlib/ | 01-Nov-2005 | 489.9 K |
| xstream/ | 28-Nov-2006 | 35.7 M |
| xtc/ | 03-Apr-2012 | 5.6 M |
| xtiff-jai/ | 01-Nov-2005 | 50.0 K |
| xxl/ | 01-Nov-2005 | 1.7 M |
| yan/ | 14-Jan-2006 | 4.6 M |
| ymsg/ | 01-Nov-2005 | 371.8 K |
| yom/ | 01-Nov-2005 | 110.8 K |
| za/ | 23-May-2013 | 170.6 K |
| THE_NEW_REPO1_MACHINE.txt | 27-May-2007 | 0 B |
| archetype-catalog.xml | 14-Sep-2013 | 1.6 M |
| archetype-catalog.xml.md5 | 02-Aug-2013 | 32 B |
| archetype-catalog.xml.sha1 | 02-Aug-2013 | 40 B |
| diff.sh | 28-Oct-2005 | 251 B |
| index.html.bak | 03-Feb-2010 | 90 B |
| last_updated.txt | 22-Sep-2013 | 29 B |
| maven-metadata.xml.md5 | 06-Dec-2007 | 0 B |
| maven-metadata.xml.sha1 | 06-Dec-2007 | 0 B |
| robots.txt | 10-Nov-2009 | 26 B |
| rss.xml | 06-May-2012 | 152.0 K |
|
Hi I am developing a web application with eclipse and I generate the project with a maven archetype. When I enable maven dependecy management, eclipse mark some errors in the pom file, this error is:
My pom file is the following:
Any idea? Regards | |||||||||||||
|
|
In my case the problem was solved by Window -> Preferences -> Maven -> User Settings -> Update Settings. I don't know the problem cause at the first place. | |||
|
|
|
I had the same problem but with an other cause. The solution was to deactivate Avira Browser Protection (in german Browser-Schutz). I took the solusion from m2e cannot transfer metadata from nexus, but maven command line can. It can be activated again ones maven has the needed plugin. | |||
|
|
|
I also had same problem with Eclipse 3.7.2 (Indigo) and maven 3.0.4. Eclipse wasn't picking up my maven settings, so this is what I did to fix the problem:
Those steps worked for me, but the problem isn't consistent. I've only had with issue on one computer. | ||||
|
|
|
I had a similar case for the default groovy compiler plugin The solution was to install ME2 provided by Springsource according to this answer Plugin execution not covered by lifecycle configuration maven error This immediately solved the "Plugin execution not covered by lifecycle configuration" problem in Eclispe Juno. | |||
|
|
|
in my case there was a dependency without a version. in eclipse m2e does not force you to enter a version so i left it blank. once i put the version in pom.xml from within eclipse all was fine | |||
|
|
|
This error bothered me for two days. I tried all kinds of solutions, nothing worked. Finally I give up and tried a radical approach. and it worked! Here are the steps:
I guess it was "indeterministic" as the following article said. | |||
|
|
|
I would add some points that helped me to solve this problem :
Having the local repository OK, on the other hand, turned out to be quite costly, as many archetypes would not get loaded, due apparently to timeouts of m2eclipse and very unstable communication speeds in my case. In many cases only the error file could be found in the folder ex : Also really worthy were :
(from within the project folder) (hint given in another thread, thanks also).
To finish, in any case, a lot of time (!..) could have been et could certainly still be spared with a light tool repairing thoroughly the local repository straightaway. I could not yet find it. Actually it should even be normally a mvn command ("--repair-local-repository"). | ||||
|
|
|
It must be a configuration problem. Your pom is fine. Here's what I did. New folder, put your pom inside. Then in eclipse: import -> maven -> existing maven project. Dependencies got included in the project. I did this using eclipse helios. I think the plugin version I am using is 0.12 You should check the maven properties in eclipse. | |||||||||
|
|
I solved this by running | |||||||||
|
|
In this particular case, the solution was the right proxy configuration of eclipse (Window -> Preferences -> Network Connection), the company possessed a strict security system. I will leave the question, because there are answers that can help the community. Thank you very much for the answers above. | |||
|
|
|
Just go to your user folder, inside it there's a ".m2" folder, open it and delete the folder "repository". Go to eclipse, clean your project, then right click->Maven->Update Project .. and you are ready to go. | |||||||||||||
|
|
I had same problem with Eclipse 3.7.2 (Indigo) and maven 3.0.4. In my case, the problem was caused by missing Solution: 1.) add dependency to pom.xml
2.) run 3.) refresh the project in eclipse (F5) 4.) run JAR file is downloaded to local repository and there are no errors in WS. | |||||||||||||||||
|
Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin:2.3.2:testCompile (execution: default-testCompile, phase: test-compile)
CoreException: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-compiler-plugin:2.3.2 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:2.3.2: ArtifactResolutionException: Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:pom:2.3.2 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:2.3.2 from/to central (http://repo.maven.apache.org/maven2): null to http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.3.2/maven-compiler-plugin-2.3.2.pom
으악...도저히 모르겠다..해결방법을..ㅠ.ㅠ...
찾았다..ㅋㅋㅋ해결방법을~!!!
[결과]
참고링크!!
http://stackoverflow.com/questions/8834806/m2eclipse-error
해결방법
접기
Solution:
1.) add dependency to pom.xml
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</dependency>
2.) run mvn install from Eclipse or from command line
3.) refresh the project in eclipse (F5)
4.) run Maven > Update Project Configuration... on project (right click)
JAR file is downloaded to local repository and there are no errors in WS.
접기
- 끝 -
jquery_dynatree-1_2_5-all.zip

