What do you think about re-writing this tutorial in an AppFuse
environment and seeing if we make it simpler?

Matt

On 9/13/07, tibi <[EMAIL PROTECTED]> wrote:
> i would like to add this to the tutorial page:
>
> please eval.....
>
> tibi
>
> --------------------------------------------------------------------------------------------------------
>
> this part is an extension on the following  fine tutorial:
> http://cwiki.apache.org/S2WIKI/struts-2-spring-2-jpa-ajax.html
> take care the tutorial does not do anything apart from demonstrating the
> working of ajax. the java code is prototype only.
>
> this tutorial misses out on 3 things:
> 1a) integration it within appfuse setup, taking care of the dojo files
> 1b) integration it within appfuse setup, taking care of the importing
> order of the js files
> 2) getting it working with the decorator, or better without ;)
>
> 1a) the dojo files can't be run from the sturts.jar file.
>
> to solve this open the struts2-core-2.0.6.jar
> copy the dojo folder into
> src/main/webapp/struts/dojo
>
> open your web.xml and make sure the staticFIlter is including the right
> folder:
>     <filter>
>         <filter-name>staticFilter</filter-name>
>         <filter-class>org.appfuse.webapp.filter.StaticFilter</filter-class>
>         <init-param>
>             <param-name>includes</param-name>
>             <param-value>/struts/dojo/*</param-value>
>         </init-param>
>     </filter>
>
> 1b) make sure the dojo files are imported first.
> to do this open your /src/main/webapp/decoraters/default.jsp file and
> add this line above! all other js imports:
> <s:head theme="ajax" debug="true"/>
>
> (otherwise it will conflict with atleast the scriptaculous.js)
>
> 2) make sure your ajax return string will not be decorated.
> there are many option but i like to do this:
> open your decorators.xml file:
> <decorators defaultdir="/decorators">
>     <excludes>
>         <pattern>/*ajax=true*</pattern>
>         <pattern>/*decorate=false*</pattern>
>         <pattern>/struts/dojo/*</pattern> <!-- OK to remove if you're
> not using Struts -->
>         <pattern>/resources/*</pattern>
>     </excludes>
>     <decorator name="default" page="default.jsp">
>         <pattern>/*</pattern>
>     </decorator>
> </decorators>
> i added the decorate=false part. urls with this parameter will not be
> decorated.
>
> so an example would be nice right:
> below an ajaxTest.jsp page which will be the caller.
> than an ajaxReturn.jsp page which will be the returned data.
> i expect you can make an AjaxAction with the methods String ajax(),
> getPersons() etc..by your self.
> than this is connected by struts like this:
> --------------------------------------------------------
>         <action name="ajax" class="ajaxTest">
>             <result>/WEB-INF/pages/employee/ajaxTest.jsp</result>
>             <result
> name="ajax">/WEB-INF/pages/employee/ajaxReturn.jsp</result>
>         </action>
>
> -------------------------------------------------------
> the ajaxTest.jsp:
> <%@ taglib prefix="s" uri="/struts-tags"%>
>     <head>
>         <script type="text/javascript">
>             dojo.event.topic.subscribe("/edit", function(data, type,
> request) {
>             alert("type: "+type);
>             alert("data: "+data);
>             if(type="load"){
>                 document.getElementById("result").innerHTML=data;
>             }
>
>             });
>         </script>
>     </head>
>
> <!-- URL link to struts action-->
> <s:url id="ajaxText" action="ajax" method="ajax" >
> <s:param name="decorate" value="false" />
> </s:url>
>
> <!-- Div where content will be displayed -->
> <s:div theme="ajax" id="weather" href="${ajaxText}">
>     loading content... from the ajax action the ajax method is called.
> than the ajaxReturn.jsp is rendered here.
> </s:div>
>
>
> <p>Persons</p>
> <s:if test="persons.size > 0">
>     <table>
>         <s:iterator value="persons">
>             <tr id="row_<s:property value="id"/>">
>                 <td>
>                     <s:property value="firstName" />
>                 </td>
>                 <td>
>                     <s:property value="lastName" />
>                 </td>
>                 <td>
>                 <!-- call the remove method on the ajax action no return-->
>                     <s:url id="removeUrl" action="ajax" method="remove">
>                         <s:param name="id" value="id" />
>                         <s:param name="decorate" value="false" />
>                     </s:url>
>                     <s:a href="%{removeUrl}" theme="ajax" >Remove</s:a>
>
>                     <!-- call the edit method an the ajax action. the
> result (ajaxResult.jps)
>                     will be handed to the edit javascript mothed
> attached to dojo (above) -->
>                     <s:url id="editUrl" action="ajax" method="ajax">
>                         <s:param name="id" value="id" />
>                         <s:param name="decorate" value="false" />
>                     </s:url>
>                     <s:a href="%{editUrl}" id="a_%{id}" theme="ajax"
> notifyTopics="/edit">Edit</s:a>
>                 </td>
>                 <td>
>                 <a href=ajax!remove.html?id=2>remove me no ajax</a>
>                 </td>
>             </tr>
>         </s:iterator>
>     </table>
> </s:if>
>
> <hr>
> <div id=result></div>
> ------------------------------------------------------------------------------------------------------------------------------
> the ajaxResult.jsp:
> <%@ taglib prefix="s" uri="/struts-tags"%>
> Make some nice form here. Now show all persons.
> <s:iterator value="persons">
> <table><tr><td><s:property value="firstName" /></td>
> <td><s:property value="lastName" /></td>
> </tr>
> </table>
>     </s:iterator>
> ------------------------------------------------------------------------------------------------------------------------
> ok here is my action to:
> package nl.incipio.match.webapp.action;
>
> import java.util.List;
>
> import org.appfuse.model.User;
>
> import com.opensymphony.xwork2.Preparable;
>
> import nl.incipio.match.util.MyBaseAction;
>
> public class AjaxTestAction extends MyBaseAction implements Preparable {
>     private static final long serialVersionUID = 378605805550104346L;
>
>     private List<User>        persons;
>
>     private Long              id;
>
>     @Override
>     public String execute() throws Exception {
>         log.debug("just getting the stuf");
>         persons = (List<User>) getRequest().getAttribute("persons");
>         if (persons == null) {
>             log.debug("just ones please");
>             persons = userManager.getUsers(null);
>             getRequest().setAttribute("persons", persons);
>         } else {
>             log.debug("persons" + persons.size());
>         }
>         return SUCCESS;
>     }
>
>     public List<User> getPersons() {
>         return persons;
>     }
>
>     public void setPersons(List<User> persons) {
>         this.persons = persons;
>     }
>
>     public String remove() throws Exception {
>         log.debug("do some removing here when i feel like it id:" + id);
>         if (persons != null) {
>             log.debug("before persons" + persons.size());
>             persons.remove((id.intValue() - 1));
>             log.debug("after persons" + persons.size());
>         }
>         return SUCCESS;
>     }
>
>     public String save() throws Exception {
>         log.debug("do some saving here when i feel like it");
>         return execute();
>     }
>
>     public String ajax() {
>         log.debug("ajax is doing something id:"+id);
>         return "ajax";
>     }
>
>     public String edit() throws Exception {
>         log.debug("do some editing here when i feel like it");
>         return execute();
>     }
>
>     public Long getId() {
>         return id;
>     }
>
>     public void setId(Long id) {
>         this.id = id;
>     }
>
>     public void prepare() throws Exception {
>         log.debug("i'm getting prepared!!!");
>
>     }
> }
> ------------------------------------------------------------------
> spring config in applicationContext.xml:
>      <bean id="ajaxTest"
> class="nl.incipio.match.webapp.action.AjaxTestAction">
>         <property name="userManager" ref="userManager"/>
>     </bean>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
http://raibledesigns.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to