[
https://issues.apache.org/jira/browse/TAPESTRY-1456?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jesse Kuhnert updated TAPESTRY-1456:
------------------------------------
Fix Version/s: (was: 4.1.1)
4.1.3
> Problems With RenderBlock
> -------------------------
>
> Key: TAPESTRY-1456
> URL: https://issues.apache.org/jira/browse/TAPESTRY-1456
> Project: Tapestry
> Issue Type: Bug
> Components: XHR/dhtml/Ajax
> Affects Versions: 4.1.1
> Environment: Windows, Apache Tomcat 6.0, Firefox 2.0, Tapestry 4.1.1
> Reporter: Victor Denisov
> Fix For: 4.1.3
>
>
> RenderBlock. When I tried to change block asynchronously from one to another
> which contains Form component(or another dojo component), old block removing,
> new tried to insert(application gets correct ajax responce) but init script
> runs before new block inserted, and fails because component form not exists
> yet(and in init script tapestry.registerForm(), try to register yet not
> existing Form).
> When i try to update component which contains RenderBlock error occures:
> FATAL exception raised: Form not found with id form
> ERROR: 9:54:35: Error evaluating script: //<![CDATA[
> dojo.require("tapestry.form");tapestry.form.registerForm("form", true); //]]>
> Error : Form not found with id form :
> http://localhost:8080/iTrack/app?service=asset&path=%2Fdojo%2Fdojo.js : line
> 15
> Page gets such response which invokes error!
> Probably it is not a bug, but a can't find what is wrong.
> Its html code
> <span jwcid="@Menu">
>
> <table width = "100%">
> <tr witdh = "100%" >
> <td width="30%" valign="top" id="showTable">
> <span jwcid="[EMAIL PROTECTED]:JsTree" source="ognl:treeModel"
> jsVariableName="literal:nodesTree" value="ognl:myNode" >
> <span jwcid="@DirectLink"
> listener="listener:treeStateChanged" async="true" parameters="ognl:myNode.id">
> <span jwcid="@Insert" value="ognl:myNode.name" />
> </span>
>
> </span>
> </td>
> <td width="70%" valign="top">
> <span id="showWindow">
> <span jwcid="[EMAIL PROTECTED]" block="ognl:selectedBlock" />
> </span>
> </td>
> </tr>
> </table>
>
>
> <span jwcid="[EMAIL PROTECTED]">
> <h3>Adding issue to component <span id="editingComponent"><span
> jwcid="[EMAIL PROTECTED]" value="ognl:componentName" /></span></h3>
> <span id="editingArea">
> <span jwcid="@If" condition="ognl:message!=null"><h4><span
> jwcid="[EMAIL PROTECTED]" value="ognl:message"/></h4></span>
> </span>
> <span jwcid="@bf:BeanForm"
> bean="ognl:issueData"
> save="listener:save"
> save_value="message:add-issue"
>
> properties="literal:name{required},description=TextArea,resolution,status{required},priority{required}"
> async="true"
> focus="false"
> />
> </span>
>
> <span jwcid="[EMAIL PROTECTED]">
> Hello all
> </span>
>
> <span jwcid="[EMAIL PROTECTED]">
> Bye bye every body
> </span>
>
>
> </span>
> Its java code
> package com.iTrack.pages;
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.Collection;
> import java.util.Date;
> import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.IScript;
> import org.apache.tapestry.PageRenderSupport;
> import org.apache.tapestry.TapestryUtils;
> import org.apache.tapestry.annotations.EventListener;
> import org.apache.tapestry.annotations.InjectScript;
> import org.apache.tapestry.annotations.Persist;
> import org.apache.tapestry.components.Block;
> import org.apache.tapestry.engine.IPageLoader;
> import org.apache.tapestry.event.BrowserEvent;
> import org.apache.tapestry.html.BasePage;
> import org.apache.tapestry.services.ResponseBuilder;
> import org.apache.tapestry.spec.IComponentSpecification;
> import com.iTrack.components.JsTree.model.SimpleTreeNode;
> import com.iTrack.model.component.Component;
> import com.iTrack.model.component.Issue;
> import com.iTrack.model.component.Project;
> import com.iTrack.model.user.User;
> import com.iTrack.pages.showprojects.AbstractNode;
> import com.iTrack.pages.showprojects.ComponentNode;
> import com.iTrack.pages.showprojects.IssueNode;
> import com.iTrack.pages.showprojects.ProjectNode;
> import com.iTrack.pages.showprojects.RootNode;
> import com.iTrack.util.DaoFactory;
> public abstract class ShowProjects extends BasePage {
> private SimpleTreeNode myNode;
> private ArrayList<SimpleTreeNode> allNodes;
>
> ArrayList<Block> blocks = new ArrayList<Block>();
> public abstract IScript getScript();
> @Persist
> public abstract int getSelectedBlockId();
> public abstract void setSelectedBlockId(int id);
> public ArrayList<SimpleTreeNode> getTreeModel() {
> setAllNodes(new ArrayList<SimpleTreeNode>());
> SimpleTreeNode root = new RootNode((long) getAllNodes().size());
> getAllNodes().add(root);
> List<Project> projects = (List<Project>) DaoFactory.getComponentDao()
> .getAllProjects();
> for (Project project : projects) {
> root.insert(getTree(project));
> }
> return root.getPlainTree();
> }
> public SimpleTreeNode getMyNode() {
> return myNode;
> }
> public void setMyNode(SimpleTreeNode myNode) {
> this.myNode = myNode;
> }
> private SimpleTreeNode getTree(Component component) {
> SimpleTreeNode ans;
> if (component instanceof Project) {
> ans = new ProjectNode((long) getAllNodes().size(),
> (Project)component);
> } else {
> ans = new ComponentNode((long) getAllNodes().size(), component);
> }
> getAllNodes().add(ans);
> Collection<Component> children = component.getSubComponents();
> for (Component child : children) {
> ans.insert(getTree(child));
> }
> Collection<Issue> issues = component.getIssues();
> for (Issue issue : issues) {
> IssueNode issueNode = new IssueNode((long) getAllNodes().size(),
> issue);
> getAllNodes().add(issueNode);
> ans.insert(issueNode);
> }
> return ans;
> }
> public Block getSelectedBlock() {
> return blocks.get(getSelectedBlockId());
> }
> public void treeStateChanged(Long id) {
> setMessage(null);
>
> SimpleTreeNode node = getAllNodes().get(id.intValue());
> if (node instanceof ComponentNode) {
> setSelectedBlockId(0);
> getPage().getRequestCycle().getResponseBuilder().updateComponent(
> "showWindow");
>
> ComponentNode componentNode = (ComponentNode) node;
> setCurrentNode(componentNode);
> getPage().getRequestCycle().getResponseBuilder().updateComponent(
> "editingComponent");
> }
> }
> public String getComponentName() {
> if (getCurrentNode() != null) {
> return getCurrentNode().toString();
> }
> return "";
> }
> @Override
> public void finishLoad(IRequestCycle arg0, IPageLoader arg1,
> IComponentSpecification arg2) {
> super.finishLoad(arg0, arg1, arg2);
> setIssueData(new Issue());
>
> blocks.add((Block) getComponent("addIssue"));
> blocks.add((Block) getComponent("fullish"));
>
> setSelectedBlockId(1);
> }
> public void save(IRequestCycle cycle) {
> if (getCurrentNode() == null) {
> setMessage("change component please");
> cycle.getResponseBuilder().updateComponent("editingArea");
> cycle.getResponseBuilder().updateComponent("showTable");
> return;
> }
> getIssueData().setComponent(
> (Component) ((ComponentNode) getCurrentNode()).getElement());
> getIssueData().setCreator((User) DaoFactory.getUserDao().getById(1));
> getIssueData().setLastUpdate(new Date(System.currentTimeMillis()));
> DaoFactory.getIssueDao().save(getIssueData());
> setIssueData(new Issue());
> setMessage("issue successfully added");
> cycle.getResponseBuilder().updateComponent("editingArea");
> cycle.getResponseBuilder().updateComponent("showTable");
> }
> public void delete(IRequestCycle cycle) {
> }
> public ArrayList<SimpleTreeNode> getAllNodes() {
> return allNodes;
> }
> public void setAllNodes(ArrayList<SimpleTreeNode> nodes) {
> allNodes = nodes;
> }
> @Persist
> public abstract AbstractNode getCurrentNode();
> public abstract void setCurrentNode(AbstractNode currentNode);
> @Persist
> public abstract Issue getIssueData();
> public abstract void setIssueData(Issue editingIssue);
> @Persist
> public abstract String getMessage();
> public abstract void setMessage(String message);
> }
> Ajax response
> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD
> XHTML 1.0 Transitional//EN"
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
> <!ENTITY nbsp ' '>
> ]>
> <ajax-response><response id="showWindow" type="element">
> <h3>Adding issue to component <span
> id="editingComponent">firstChild1</span></h3>
> <span id="editingArea">
> </span>
> <span>
> <form method="post"
> action="/iTrack/app;jsessionid=E6183CDDDB726B0866BEA7DDB52134EE" id="form">
> <div style="display:none;" id="formhidden"><input type="hidden"
> name="formids" value="notCustomized1
> ,rows,name,description,resolution,status,priority,notCustomized2,hasSave,save,hasCancel,hasRefresh,hasDelete"
> />
> <input type="hidden" name="component" value="showWindowForm" />
> <input type="hidden" name="page" value="ShowProjects" />
> <input type="hidden" name="service" value="direct" />
> <input type="hidden" name="session" value="T" />
> <input type="hidden" name="submitmode" value="" />
> <input type="hidden" name="submitname" value="" />
> <input type="hidden" name="notCustomized1" value="T" />
> <input type="hidden" name="rows" value="VBP_b_c_a_a" />
> <input type="hidden" name="rows" value="VBP_b_d_c_b" />
> <input type="hidden" name="rows" value="VBP_b_e_c_a" />
> <input type="hidden" name="rows" value="VBP_b_f_a_c" />
> <input type="hidden" name="rows" value="VBP_b_g_a_c" />
> <input type="hidden" name="notCustomized2" value="T" />
> <input type="hidden" name="hasSave" value="T" />
> <input type="hidden" name="hasCancel" value="F" />
> <input type="hidden" name="hasRefresh" value="F" />
> <input type="hidden" name="hasDelete" value="F" />
> </div>
> <table id="table">
> <span>
> <span id="rows">
> <tr id="informal">
> <td class="bf_Left" id="informal_0"><label
> for="name">Name</label>:</td>
> <td class="bf_Right" id="informal_1"><input type="text"
> name="name" value="" id="name"
> class="text" /></td>
> </tr>
> </span><span id="rows_1">
> <tr id="informal_2">
> <td class="bf_Left" id="informal_3"><label
> for="description">Description</label>:</td
> >
> <td class="bf_Right" id="informal_4"><textarea
> name="description" id="description"><
> /textarea></td>
> </tr>
> </span><span id="rows_2">
> <tr id="informal_5">
> <td class="bf_Left" id="informal_6"><label
> for="resolution">Resolution</label>:</td>
> <td class="bf_Right" id="informal_7"><input type="text"
> name="resolution" value="" id
> ="resolution" class="text" /></td>
> </tr>
> </span><span id="rows_3">
> <tr id="informal_8">
> <td class="bf_Left" id="informal_9"><label
> for="status">Status</label>:</td>
> <td class="bf_Right" id="informal_10"><select name="status"
> id="status">
> <option value="0">[OPEN]</option>
> <option value="1">[OPENNED]</option>
> <option value="2">[INPROGRESS]</option>
> <option value="3">[CLOSED]</option>
> </select></td>
> </tr>
> </span><span id="rows_4">
> <tr id="informal_11">
> <td class="bf_Left" id="informal_12"><label
> for="priority">Priority</label>:</td>
> <td class="bf_Right" id="informal_13"><select name="priority"
> id="priority">
> <option value="0">[CRITICAL]</option>
> <option value="1">[BLOCKER]</option>
> <option value="2">[MAJOR]</option>
> <option value="3">[MINOR]</option>
> <option value="4">[TRIVIAL]</option>
> </select></td>
> </tr>
> </span>
> </span>
> <span>
> <tr>
> <td colspan="2" class="bf_Buttons">
>
> <span><input type="submit" name="save" id="save" value="Add issue"
> class="button" /></span>
> </td>
> </tr>
> </span>
> </table>
> </form>
> </span>
> </response><response id="initializationscript" type="script"><script>
> //<![CDATA[
> dojo.require("tapestry.form");tapestry.form.registerForm("form", true);
> //]]>
> </script></response></ajax-response>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]