1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | if (!html5) var html5 = {} if (!html5.jsf) { html5.jsf = { init : function(ccid, payloadType, renderIds) { var dropzone = $(ccid); if (dropzone.serverPayload) // already initialized return; dropzone.payloadInput = $(ccid + ":form:payload"); dropzone.acceptDrop = false; dropzone.serverPayload = function() { return dropzone.payloadInput.value; }; dropzone.addEventListener("drop", function(event) { if (payloadType == "") payloadType = "text"; if (renderIds == "" || renderIds == "@this") renderIds = ccid; dropzone.payloadInput.value = event.dataTransfer .getData(payloadType); jsf.ajax.request(dropzone.payloadInput, event, { render: renderIds onevent : function(data) { if (data.status == "success") html5.jsf.init(ccid, payloadType, renderIds); } }); }, false); dropzone.addEventListener("dragenter", function(event) { if (dropzone.acceptDrop) event.preventDefault(); }, false); dropzone.addEventListener("dragover", function(event) { if (dropzone.acceptDrop) event.preventDefault(); }, false); } }; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package com.clarity; // imports omitted. See <a href="#listing10">清单 10</a>. @Named @SessionScoped public class DragDrop implements Serializable { @Inject private RSSFeed rssFeed; public DragDrop() { } public String getPayload() { // sends a string that is a concatenation of the saved // item's titles, back to the client LinkedList<RSSItem> savedItems = rssFeed.getSavedItems(); Iterator<RSSItem> it = savedItems.iterator(); String s = ""; while (it.hasNext()) { RSSItem item = it.next(); s += item.getTitle() + " | "; } return s; } public void setPayload(String payload) { // creates a new saved item, based on the payload. Payload // was set in the drop event listener for the h5:drop component // in /sections/feeds/menuLeft.xhtml StringTokenizer st = new StringTokenizer(payload); RSSItem item = new RSSItem(); item.setTitle(st.nextToken("|")); st.nextToken(" "); item.setLink(st.nextToken(" ")); rssFeed.getSavedItems().add(item); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h5="http://java.sun.com/jsf/composite/html5" xmlns:places="http://java.sun.com/jsf/composite/places"> <script> // event.target is one of the h5:drag elements generated by ui:repeat below function dragStart(event) { var linkref = event.target.firstElementChild.firstElementChild; // anchor var link = linkref.href; var title = linkref.textContent; var dropzone = $("dropzone"); // h5:drop in dropZone.xhtml dropzone.acceptDrop = true; var serverPayload = dropzone.serverPayload(); if (serverPayload.indexOf(title) != -1) dropzone.acceptDrop = false; // link already present event.dataTransfer.setData('text', title + " | " + link + " "); } </script> <h:panelGrid columns="1" id="items"> <ui:repeat value="#{rssFeed.items}" var="item"> <h5:drag ondragstart="dragStart(event)"> <p> <a href="#{item.link}">#{item.title}</a> <br /> </p> </h5:drag> </ui:repeat> </h:panelGrid> </ui:composition> |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |