L'appel du RPC se charge en dernier
Salut
j'ai une methode :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private Document getXmlData() {
greetingService.getCountriesList(new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
MessageBox.alert(result);
xmlDoc = XMLParser.parse(result);
}
@Override
public void onFailure(Throwable caught) {
MessageBox.alert(caught.getMessage());
}
});
return xmlDoc;
} |
OnmduleLoad():
Code:
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 49 50 51 52 53 54 55 56 57 58 59 60
|
Document doc = getXmlData();
//
// Element treeNode = doc.getDocumentElement();
// NodeList nodes = treeNode.getChildNodes();
// Tree tree = new Tree();
// TreeNode node = new TreeNode();
Panel panel = new Panel();
panel.setBorder(false);
panel.setPaddings(15);
final TreePanel treePanel = new TreePanel();
treePanel.setWidth(240);
treePanel.setHeight(400);
treePanel.setTitle("Editable Tree");
treePanel.setAnimate(true);
treePanel.setEnableDD(true);
treePanel.setContainerScroll(true);
treePanel.setRootVisible(true);
final XMLTreeLoader loader = new XMLTreeLoader();
loader.setDataUrl(getXmlData().toString());
loader.setMethod(Connection.GET);
loader.setRootTag("countries");
loader.setLeafTag("country");
loader.setAttributeMappings(new String[] { "@title" });
final AsyncTreeNode root = new AsyncTreeNode("Countries", loader);
treePanel.setRootNode(root);
root.expand();
treePanel.expandAll();
treePanel.addTool(new Tool(Tool.REFRESH, new Function() {
public void execute() {
treePanel.getEl().mask("Loading", "x-mask-loading");
root.reload();
root.collapse(true, false);
Timer timer = new Timer() {
@Override
public void run() {
treePanel.getEl().unmask();
root.expand(true, true);
}
};
timer.schedule(1000);
}
}, "Refresh"));
TreeEditor treeEditor = new TreeEditor(treePanel);
panel = new Panel();
panel.setBorder(false);
panel.add(treePanel);
RootPanel.get().add(panel); |
Codes dans mon service pour recupérer un String xml
Code:
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[] { "Australia" });
list.add(new Object[] { "Brazil" });
list.add(new Object[] { "Canada" });
list.add(new Object[] { "China" });
list.add(new Object[] { "Germany" });
list.add(new Object[] { "France" });
list.add(new Object[] { "India" });
list.add(new Object[] { "Seychelles" });
list.add(new Object[] { "United States" });
list.add(new Object[] { "Japan" });
list.add(new Object[] { "Italy" });
list.add(new Object[] { "Ghana" });
list.add(new Object[] { "Iceland" });
list.add(new Object[] { "Finland" });
list.add(new Object[] { "Switzerland" });
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e4) {
e4.printStackTrace();
}
DOMImplementation impl = builder.getDOMImplementation();
Document doc = impl.createDocument(null,null,null);
if(list != null && list.size() != 0){
Element e1 = doc.createElement("countries");
doc.appendChild(e1);
for (Object[] objects : list) {
Element e2 = doc.createElement("country");
e1.appendChild(e2);
for (Object object : objects) {
e2.setAttribute("title",object.toString());
}
}
}
// transform the Document into a String
DOMSource domSource = new DOMSource(doc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = null;
try {
transformer = tf.newTransformer();
} catch (TransformerConfigurationException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
//transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
transformer.setOutputProperty
("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
java.io.StringWriter sw = new java.io.StringWriter();
StreamResult sr = new StreamResult(sw);
try {
transformer.transform(domSource, sr);
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String xml = sw.toString();
return xml; |
Dans l'implementation du service je créé un string en format xml. Je tiens a charger un tree a partir ce fichier xml. dans mes codes coté client je convertis le string xml en document.
Mon probleme est lorsque je fait un debug le fonction getXmlData me retourne un document Null. Donc je n'arrive pas charger le tree. C'est a la fain de mon debug que le service est chargé. Je n'arrive pas à comprendre cela.
Quelqu'un pourra m'aider svp.
Neerou
C'est un appel Asynchrone
C'est normal, puisque ce sont des appels Asynchrone(AsyncCallback).
tu dois construire/remplir ton TreePanel Apres la reponse rpc.
Aide pour un problème similaire
J'ai le même problème, mais c'est avec le BeanModel
Code:
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 49 50 51 52 53 54 55
|
proxy = new RpcProxy<List<PlatformForm>>() {
protected void load(Object loadConfig,
AsyncCallback<List<PlatformForm>> callback) {
// TODO Auto-generated method stub
greetingService.getListPlatform(new AsyncCallback<List<PlatformForm>>() {
public void onFailure(Throwable caught) {
// Show the RPC error message to the user
caught.printStackTrace();
}
public void onSuccess(List<PlatformForm> result) {
for (int i = 0; i < result.size(); i++) {
loader.load();
}
}
});
}
};
BeanModelReader reader = new BeanModelReader();
// tree loader
loader = new BaseTreeLoader<BeanModel>(proxy, reader){
@Override
public boolean hasChildren(BeanModel parent) {
return parent instanceof BeanModel;
}
};
// trees store
store = new TreeStore<BeanModel>(loader);
store.setKeyProvider(new ModelKeyProvider<BeanModel>() {
public String getKey(BeanModel model) {
return model.<String> get("id");
}
});
tree = new TreePanel<BeanModel>(store);
tree.setStateful(true);
tree.setDisplayProperty("label");
// statefull components need a defined id
tree.setId("statefullasynctreepanel"); |
mais la réponse est que " store est vide "
donc je n'arrive pas à construire mon TreePanel :(
Quelqu'un peut m'aider à resoudre ce problème SVP ?? :cry: