Struts

From Documentation
Revision as of 06:59, 27 July 2011 by Alicelin (talk | contribs)

The use of Struts with ZK is straightforward: just replace JSP pages with ZUL pages. You don't need to modify action handlers, data models and others. All you need to do is to map the result view to a ZUL page instead of JSP. In addition, EL expressions will work the same way even in the ZUL page.

Use ZUL instead of JSP

First, let us take the Hello World example in Struts tutorial as an example. We could provide a ZUL page called HelloWorld.zul to replace HelloWorld.jsp as follows.

<?page title="Hello World!"?>

<h:h2 xmlns:h="xhtml">
${messageStore.message}
</h:h2>

As shown, you could use the same EL expression to access the data provided by Struts and your action handler.

Then, you map the hello action to HelloWorld.zul by modifying WEB-INF/classes/struts.xml as follows.

<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
	<result name="success">/HelloWorld.zul</result>
</action>

Then, you could visit http://localhost:8080/Hello_World_Struts2_Ant/hello.action as you are used to and have the same result.

Of course, it is a ZUL document. You could have any Ajax behavior you'd like.

Access Data Model of Struts in Composer

The data (so-called model) provided by Struts (or the action) can be retrieved by invoking Execution.getAttribute(String). For example,

package foo;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zk.ui.*;
import org.zkoss.zul.*;
import org.apache.struts.helloworld.model.MessageStore;

public class FooComposer implements org.zkoss.zk.ui.util.Composer {
	public void doAfterCompose(Component comp) {
		MessageStore mstore = Executions.getCurrent().getAttribute("messageStore");
		comp.appendChild(new Label(":"+mstore.getMessage()));
	}
}

Submit Form

By replacing JSP with ZUML, you could enable a static page with ZK's power. And, you could do any ZUML document can do. In other words, Struts is used only for Model and Controller, while ZK for View. However, sometimes you have to redirect back to submit-based URL (maybe another action with parameters). It can be done easily by enclosing the input components with HTML FORM. For example,

<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<n:form action="${c:encodeURL('/login.action')}" method="POST" xmlns:n="native">
<grid>
  <rows>
    <row>
      User: <textbox name="user"/>
    </row>
    <row>
      Password: <textbox name="password"/>
    </row>
    <row>
      <button label="Login" type="submit"/>
    </row>
  </rows>
</grid>
</n:form>

As shown above, notice that

  • Every input (including listbox and tree) shall be assigned with a name that will become the parameter's name when submitting the form.
  • You could use the encodeURL function to encode an URL.

For more information, please refer to ZK Developer's Reference/Integration/Use_ZK_in_JSP#HTML_Form the Use ZK in JSP section.

Version History

Last Update : 2011/07/27


Version Date Content
     



Last Update : 2011/07/27

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.