http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/crud-demo-i.html ---------------------------------------------------------------------- diff --git a/content/docs/crud-demo-i.html b/content/docs/crud-demo-i.html index 6715a74..8e6d6b3 100644 --- a/content/docs/crud-demo-i.html +++ b/content/docs/crud-demo-i.html @@ -34,20 +34,6 @@ under the License. color: #666; } </style> - <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> - <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> - <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <script type="text/javascript" language="javascript"> var hide = null; var show = null; @@ -141,7 +127,7 @@ under the License. <div class="wiki-content"> <div id="ConfluenceContent"><h1 id="CRUDDemoI-Struts2CRUDExample">Struts 2 CRUD Example</h1> -<div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Due to the export of the wiki to static pages, attachements are not visible. You can find the .war with the source <a shape="rect" class="external-link" href="crud-demo-i.data/struts-crud.war" rel="nofollow">here</a></p></div></div> +<rich-text-body><p>Due to the export of the wiki to static pages, attachements are not visible. You can find the .war with the source <a shape="rect" class="external-link" href="crud-demo-i.data/struts-crud.war" rel="nofollow">here</a></p></rich-text-body> <h2 id="CRUDDemoI-Introduction">Introduction</h2> @@ -154,8 +140,7 @@ under the License. <h3 id="CRUDDemoI-.warlayout">.war layout</h3> <p>The .zip file you can download on this site can be dropped in your servlet container (rename it to .war then) and contains the source code under the WEB-INF directory. The layout is also kept as simple as possible:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> - struts-crud -- [css] (contains the stylesheets) -- [WEB-INF] @@ -165,8 +150,7 @@ under the License. ---- [src] (contains the source files) ---- web.xml (our webapplication descriptor) -- index.html (simple redirect page) -</pre> -</div></div> +</plain-text-body> <h3 id="CRUDDemoI-Configurationfiles">Configuration files</h3> @@ -174,8 +158,7 @@ under the License. <h4 id="CRUDDemoI-WEB-INF/web.xml">WEB-INF/web.xml</h4> <p>The webapplication's descriptor file contains one filter and its mapping. By default, the filter is mapped to /*, meaning all requests will be intercepted, but only those ending with a specific suffix (.action, by default) and certain special paths (for static files) will be processed and handled by Struts 2.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <web-app> <display-name>Struts 2 CRUD Demo</display-name> <filter> @@ -188,8 +171,7 @@ under the License. <url-pattern>/*</url-pattern> </filter-mapping> </web-app> -</pre> -</div></div> +</plain-text-body> <p>See <a shape="rect" href="webxml.html">web.xml</a> for further details.</p> @@ -199,12 +181,13 @@ under the License. To understand these terms, we'll need to take a look at Struts 2's (and XWork's) architecture. A basic request goes a bit like this:<br clear="none"> A request is submitted, and our ActionMapper will try to determine the correct Action to execute. To find it, it will look up the registered names in your struts.xml. If one is found, before executing the Action, it will loop through a defined stack of interceptors.</p> -<div class="navmenu" style="float:right; width:200px; background:white; margin:3px; padding:3px"> - <div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Developer Info</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> -<p> <a shape="rect" href="interceptors.html" title="Interceptors">Learn More About Interceptors</a></p> +<plain-text-body>{float:right|width=200px} + {tip:title=Developer Info} + [Learn More About Interceptors|Interceptors] -<p> <a shape="rect" href="parameters-interceptor.html" title="Parameters Interceptor">Learn About the Parameters Interceptor</a></p> -</div></div></div> + [Learn About the Parameters Interceptor|Parameters Interceptor] + {tip} +{float}</plain-text-body> <p>Interceptors are a very important part of S2 - they will be invoked before and after your action is executed and the view is rendered, and as such, they are perfect for validation, authentication, open-session-in-view patterns, catching exceptions, setting or altering parameters, hiding complex operations, and more. S2 provides a number of prebuilt stacks with a ranging number of features, but nothing keeps you from defining your own interceptor stack with custom interceptors.</p> @@ -218,8 +201,7 @@ A request is submitted, and our ActionMapper will try to determine the correct A <p>Let us take a more detailed look at our <a shape="rect" href="strutsxml.html">struts.xml</a>:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <struts> <!-- Configuration for the default package. --> <package name="default" extends="struts-default"> @@ -240,8 +222,7 @@ A request is submitted, and our ActionMapper will try to determine the correct A </action> </package> </struts> -</pre> -</div></div> +</plain-text-body> <p>There are four major elements covered in this example: package, interceptor, action, and result.</p> @@ -265,16 +246,14 @@ A request is submitted, and our ActionMapper will try to determine the correct A <p>This file only contains two lines, and is used to set Struts 2 specific settings (such as which IoC container to use, which fileuploader, what templates, etc ..). You don't really need it, but for i18n reasons, we use it to register our resource bundle 'guest.properties'. Note that you can register properties file on different levels in Struts 2.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> struts.custom.i18n.resources=guest -</pre> -</div></div> +</plain-text-body> <p>More information on <a shape="rect" href="strutsproperties.html">struts.properties</a></p> -<div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> -<p>It is recommended that configuration be handled with your <a shape="rect" href="strutsxml.html">struts.xml</a> file: see <a shape="rect" href="constant-configuration.html">Constant Configuration</a> for details.</p></div></div> +<rich-text-body> +<p>It is recommended that configuration be handled with your <a shape="rect" href="strutsxml.html">struts.xml</a> file: see <a shape="rect" href="constant-configuration.html">Constant Configuration</a> for details.</p></rich-text-body> <h4 id="CRUDDemoI-WEB-INF/classes/guest.properties">WEB-INF/classes/guest.properties</h4> @@ -285,8 +264,7 @@ struts.custom.i18n.resources=guest <p>Since 90% of the code is identical to the other CRUD examples displayed on <a shape="rect" class="external-link" href="http://www.learntechnology.net" rel="nofollow">this site</a>, we'll only analyze the Action class, EmployeeAction.<br clear="none"> As always, first things first - the class definition:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> ... import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.Preparable; @@ -294,8 +272,7 @@ import com.opensymphony.xwork2.Preparable; public class EmployeeAction extends ActionSupport implements Preparable { ... -</pre> -</div></div> +</plain-text-body> <p>Now, first there is the extending of the ActionSupport class - although you don't have to extend it, it provides a lot of useful extras, so you are encouraged to extend and override parts of it, but you don't have to. The interface we are implementing is a bit more interesting. The Preparable interface only defines one method, public void prepare(). By implementing this interface in your Action, you tell the prepare interceptor to call this method on your Action - so that makes it perfect to, for example, retrieve objects from a database, which is what we're 'faking' here by requesting an Employee object from the EmployeeService.</p> @@ -305,14 +282,12 @@ public class EmployeeAction extends ActionSupport implements Preparable { <p>Let's explore the doList method, which is the default method we specified in our struts.xml for our index action.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> public String doList() { employees = empService.getAllEmployees(); return SUCCESS; } -</pre> -</div></div> +</plain-text-body> <p>Surprisingly simple, no? Simply fill in the employees object, and return "success" (defined as a final static variable SUCCESS). That's it? That's it. The only thing you need now to show the list in your view layer is a simple getter for employees in your Action. The reason for this is another Struts 2 feature: the ValueStack.</p> @@ -330,28 +305,24 @@ public String doList() { <p>S2 defines a lot of tags that will dramatically speed up your development. They can alter or query the value stack, render input forms, javascript widgets, iterate over collection, and so on. On top of that, they have different themes, which add even more functionality/layout by the switch of a parameter. Themes are out of the scope of this example, but you should definitely check them out; see <a shape="rect" href="themes-and-templates.html">Themes and Templates</a>.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <%@taglib prefix="s" uri="/struts-tags" %> <head> <link href="<s:url value='/css/main.css'/>" rel="stylesheet" type="text/css"/> <title><s:text name="label.employees"/></title> </head> -</pre> -</div></div> +</plain-text-body> <p>The <code>s:url</code> tag allows you to build urls for actions, possibly with parameters. This saves you from having to type them out manually, remember (or change) what action suffix you're using, or include the web-app context. See <a shape="rect" href="url.html">Url</a> for further details.</p> <p>The <code>s:text</code> tag will look up keys in resource bundles in the valueStack (depending on the locale). So adding a new language would be a breeze. In these cases we build an url '/css/main' and we display the value of a key 'label.employees' from our guest.properties resource bundle. See <a shape="rect" href="text.html">Text</a> for further details.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:url id="url" action="crud!input" /> <a href="<s:property value="#url"/>">Add New Employee</a> -</pre> -</div></div> +</plain-text-body> <p>Here we use <code>s:url</code> to generate a URL and assign it to an ID so we can refer to it later.</p> @@ -361,8 +332,8 @@ public String doList() { <p>The S2 ActionMapper doesn't just map names to Actions - it can also change the method, or even action, by using special requests. The weird value we encountered above, crud!input, tells the ActionMapper to invoke the input()/doInput() method of the Action known as crud. So for example, you could have several slighly different methods, and rather than having to register each of them in the struts.xml file, you can use the ! notation to specify which method to execute.</p> -<div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> -<p>You may also use <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a> to run specific methods rather than use the ! character.</p></div></div> +<rich-text-body> +<p>You may also use <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a> to run specific methods rather than use the ! character.</p></rich-text-body> <p>Another thing is the fact that you can override which action/method to invoke based on a special name:action parameter, which we'll use later on in our employeeForm.jsp to make a nice cancel button.</p> @@ -372,27 +343,23 @@ public String doList() { <p>Take a look at the following lines from our employees.jsp:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:iterator value="employees" status="status"> <tr class="<s:if test="#status.even">even</s:if><s:else>odd</s:else>"> -</pre> -</div></div> +</plain-text-body> <p>The <code>s:iterator</code> tag does pretty much what you expect from it: it loops through an array/list/collection, and pushes each object it encounters on the stack on each iteration. It also has a helper attribute called <code>status</code>, which generates a status object that keep track of the index, tells you if you're in an even or odd row, and so on, while you're inside the <code>s:iterator</code> tag. See <a shape="rect" href="iterator.html">iterator</a> for further details.</p> <p>As you can see, we use that same status object in our next tag, the <code>s:if</code> and its companion, the <code>s:else</code> tag. The test attribute of <code>s:if</code> allows you to query the valueStack with an OGNL expression, which is exactly what we do here: see if the status object from our <code>s:iterator</code> tag we put on the valueStack, returns true when the method isEven() is invoked. The corresponding <code>s:else</code> method is then executed if the test method return false.</p> -<div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> -<p>Unlike JSTL's <code>c:choose</code>/<code>c:when</code>/<code>c:otherwise</code> tags you do not nest <code>s:if</code>/<code>s:else</code> inside a "parent" tag.</p></div></div> +<rich-text-body> +<p>Unlike JSTL's <code>c:choose</code>/<code>c:when</code>/<code>c:otherwise</code> tags you do not nest <code>s:if</code>/<code>s:else</code> inside a "parent" tag.</p></rich-text-body> <p>Finally, there's the <code>s:property</code> tag, which is used for displaying objects/expressions from the ValueStack. Examine this:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:property value="age" /> -</pre> -</div></div> +</plain-text-body> <p>This might be a little confusing at first, but it's very simple. This actually translates to top.getAge(), meaning we'll execute a getAge() on the top object on our ValueStack. Which happens to be .. the Action? Nope. The employees List? Closer. The current Employee object in the employee list? Bingo.</p> @@ -402,13 +369,11 @@ public String doList() { <p>Easy enough: return "input" from your Action, and register the result in your struts.xml with a dispatcher to employeeForm.jsp.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> public String doInput() { return INPUT; } -</pre> -</div></div> +</plain-text-body> <p>Nothing to it. So let's take a look at how we are going to edit an Employee.</p> @@ -432,11 +397,9 @@ Here we'll show you both, but in the example application you'll only find the fi <p>Register the DepartmentAction in your struts.xml as 'department', and you can simply call it in your page, and use the id approach we used in the s:url tag to store the result on the stack under a custom name called allDepartments:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:action name="department!list" id="allDepartments"/> -</pre> -</div></div> +</plain-text-body> <p>Now, this, by itself, does not do much. We'll show you later when we talk about the employeeForm page how to use it as an alternative approach.</p> @@ -448,16 +411,14 @@ Here we'll show you both, but in the example application you'll only find the fi <p>But first, we find another useful tag: <code>s:set</code>.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:if test="employee==null || employee.employeeId == null"> <s:set name="title" value="%{'Add new employee'}"/> </s:if> <s:else> <s:set name="title" value="%{'Update employee'}"/> </s:else> -</pre> -</div></div> +</plain-text-body> <p>The set tag allows you to store certain objects on the stack (as well as their scope - request/session/page/...), which is what we're going to do here because out of sheer laziness (and performance reasons) we refuse to do the same if/else more than once. As you can guess, it relies on the same principle as the id attribute of the <code>s:url</code> tag we saw earlier, meaning I can access it with <code>#title</code> on the ValueStack.</p> @@ -465,8 +426,7 @@ Here we'll show you both, but in the example application you'll only find the fi <h4 id="CRUDDemoI-Theactualform">The actual form</h4> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:form action="crud!save" method="post"> <s:textfield name="employee.firstName" value="%{employee.firstName}" label="%{getText('label.firstName')}" size="40"/> <s:textfield name="employee.lastName" value="%{employee.lastName}" label="%{getText('label.lastName')}" size="40"/> @@ -476,23 +436,19 @@ Here we'll show you both, but in the example application you'll only find the fi <s:submit value="%{getText('button.label.submit')}"/> <s:submit value="%{getText('button.label.cancel')}" name="redirect-action:index"/> </s:form> -</pre> -</div></div> +</plain-text-body> <p>Wow - a lot of code at once. Let's dissect it tag by tag. It may seem complicated, but as you'll see, it's actually really easy.</p> <p>The <code>s:form</code> tag generates a standard html form, while the first <code>s:textfield</code> will generate an <input type="text" .. /> - but wait, it does more. It transforms your first tag from this:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:textfield name="employee.firstName" value="%{employee.firstName}" label="%{getText('label.firstName')}" size="40"/> -</pre> -</div></div> +</plain-text-body> <p>Into this:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <tr> <td class="tdLabel"> <label for="crud!save_employee_firstName" class="label">First Name:</label> @@ -501,8 +457,7 @@ Here we'll show you both, but in the example application you'll only find the fi <input type="text" name="employee.firstName" size="40" value="" id="crud!save_employee_firstName"/> </td> </tr> -</pre> -</div></div> +</plain-text-body> <p>Let's analyze that <code>s:textfield</code> tag in greater detail. First thing we encounter is the name attribute, which is similar to the HTML input tag's name attribute. So it is by itself, not very special. However, as we've seen above, this allows S2 to call the getEmployee().setFirstName() method - and even, if necessary, create the Employee object for you. </p> @@ -516,42 +471,34 @@ Here we'll show you both, but in the example application you'll only find the fi <p>Now, we saw earlier that we could use the <code>s:text</code> tag to retrieve values from resource bundles for i18n reasons. Now that begs the question, how do we use those same values in our tags? Let's say we want to i18n'ize our textfield label. Something like this:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:textfield name="employee.firstName" value="%{employee.firstName}" label="<s:text name="label.firstName"/>" size="40"/> -</pre> -</div></div> +</plain-text-body> <p>Ugh. No, that's ugly, and it wouldn't work either. The solution is much cleaner and simpler: use another expression! If you were to check the extra methods provided by making our EmployeeAction extends ActionSupport, you would see a method called getText(String key). This method will look up a value in the resource bundle by its key, which is exactly what we need. So, the label would become something like this: %{getText('our_key')}. Makes sense? Thought so.</p> <p>Meet the next tag, s:select, which renders a select box using an iteratable collection:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:select name="employee.department.departmentId" value="%{employee.department.departmentId}" list="departments" listKey="departmentId" listValue="name"/> -</pre> -</div></div> +</plain-text-body> -<div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> -<p> There currently is a small bug in Struts 2.0.5 that does not select the correct value by default. You can solve this by using value="%{employee.department.departmentId.toString()}".</p></div></div> +<rich-text-body> +<p> There currently is a small bug in Struts 2.0.5 that does not select the correct value by default. You can solve this by using value="%{employee.department.departmentId.toString()}".</p></rich-text-body> <p>We already covered the name attribute, so let's look at the list attribute: departments. Hmm, this might seems strange at first. Where does it come from? Well, perhaps it makes much more sense to see this: list="%{departments}". Yes, it is in fact an expression on the ValueStack that will query our action for the departments we've setup before ! Then, why are we missing the %{..} ? The answer is twofold: you can still write %{departments}, and it would work as you expected. But you have to realize, that whatever you are going to iterate is going to be an expression! So, being pretty lazy and with all this Ruby-on-rails 'minimalistic' code, we decided we might as well save you a couple of RSI-related finger moves and let you discard the %{..}.</p> <p>Another quick intermezzo: you can use expressions to make your own list in an expression - which is perfect for small yes/no and male/female/eunuch selections - like this:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:select name="gender" list="%{#{'male':'Male', 'female':'Female'}}" /> -</pre> -</div></div> +</plain-text-body> <p>By the way, did you remember the <code>s:action</code> tag we used as an alternative to the prepare method to fill up the select box? We can now use the action we executed and stored on the ValueStack by referencing it by its id:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:select name="gender" list="%{#allDepartments.departments}" /> -</pre> -</div></div> +</plain-text-body> <p>So, instead of getting the departments from the current action, we used <code>s:action</code> to execute a different action that retrieves the department List. This allows you to split up, and reuse Actions (Note: you can go even further and program your own components with built-in actions, but that's out of scope).</p> @@ -563,12 +510,10 @@ Here we'll show you both, but in the example application you'll only find the fi <p>Finally, the last two tags, the submission tags. Submission tags, yes. One for submitting the form, and another one to cancel it. The first submit button, submits the form to the form's action attribute, in case crud!save.</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <s:submit value="%{getText('button.label.submit')}"/> <s:submit value="%{getText('button.label.cancel')}" name="redirect-action:index"/> -</pre> -</div></div> +</plain-text-body> <p>The second one is more interesting though. It also submits the form to the same crud!save action as the first one, but lists a special name attribute. This name attribute will cause the ActionMapper to intercept the call, and in this case, redirect it to another action. No more fiddling with javascript to have forms with multiple submit buttons - it's all done for you, without any javascript or the troubles that come with it.</p> @@ -582,8 +527,7 @@ Here we'll show you both, but in the example application you'll only find the fi <p>Since we only want to validate the crud action, we create a file EmployeeAction-crud-validation.xml and place it in our classpath (mostly next to our compiled Action class).</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> +<parameter ac:name="">xml</parameter><plain-text-body> <validators> <field name="employee.firstName"> <field-validator type="requiredstring"> @@ -606,8 +550,7 @@ Here we'll show you both, but in the example application you'll only find the fi </field-validator> </field> </validators> -</pre> -</div></div> +</plain-text-body> <p>A very important reminder: validation is once again done by an interceptor, so it should be in your stack. Even more important, validators 'query your Action/Model' and NOT your request! Keep this in mind at all times.</p> @@ -634,11 +577,9 @@ Here we'll show you both, but in the example application you'll only find the fi <p>Take a look at the value we get back from the 'errors.required.age.limit'-key:</p> -<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> +<plain-text-body> errors.required.age.limit=Please provide an age between ${min} and ${max}. -</pre> -</div></div> +</plain-text-body> <p>And guess what: min and max are indeed the two parameters we just set before ! Using OGNL expressions you can retrieve whatever you want from your validator/action/context, giving you really nice error messages (we like nice error messages). In fact, you can not only use these expressions in your error messages, but you can even set the min and max parameters dynamically. Different types of employees could have different age requirements - OGNL and polymorphy to the rescue !</p>
http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/cssxhtml-head-template.html ---------------------------------------------------------------------- diff --git a/content/docs/cssxhtml-head-template.html b/content/docs/cssxhtml-head-template.html index aecd928..35875ca 100644 --- a/content/docs/cssxhtml-head-template.html +++ b/content/docs/cssxhtml-head-template.html @@ -141,7 +141,7 @@ under the License. <div class="wiki-content"> <div id="ConfluenceContent"><p>The css_xhtml <a shape="rect" href="head.html">head</a> template is very similar to the <a shape="rect" href="xhtml-head-template.html">xhtml head template</a>. The only difference is that CSS that is included is specifically designed to provide the layout for the <a shape="rect" href="cssxhtml-theme.html">css_xhtml theme</a>. The contents of <strong>head.ftl</strong> are:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ <#-- /* * $Id$ @@ -170,7 +170,7 @@ under the License. </div></div> <p>The contents of <strong>styles.css</strong> are:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ /* * $Id$ * http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/cssxhtml-theme.html ---------------------------------------------------------------------- diff --git a/content/docs/cssxhtml-theme.html b/content/docs/cssxhtml-theme.html index 1823085..8c6fd97 100644 --- a/content/docs/cssxhtml-theme.html +++ b/content/docs/cssxhtml-theme.html @@ -34,20 +34,6 @@ under the License. color: #666; } </style> - <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> - <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> - <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> - <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <script type="text/javascript" language="javascript"> var hide = null; var show = null; @@ -139,226 +125,7 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> - <div id="ConfluenceContent"><p>The css_xhtml theme provides all the basics that the <a shape="rect" href="simple-theme.html">simple theme</a> provides and adds several features.</p><ul><li>Standard two-column CSS-based layout, using <code><div></code> for the HTML <a shape="rect" href="struts-tags.html">Struts Tags</a> (<a shape="rect" href="form.html">form</a>, <a shape="rect" href="textfield.html">textfield</a>, <a shape="rect" href="select.html">select</a>, etc)</li><li>Labels for each of the HTML <a shape="rect" href="struts-tags.html">Struts Tags</a>, placed according to the CSS stylesheet</li><li><a shape="rect" href="validation.html">Validation</a> and error reporting</li><li><a shape="rect" href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side Validation</a> using 100% JavaScript on the browser</li></ul><h2 id="css_xhtmltheme-WrappingtheSimpleTheme">Wrapping the Simple Theme</h2><p>The xhtml theme uses the "wrapping" technique descr ibed by <a shape="rect" href="extending-themes.html">Extending Themes</a>. Let's look at how the HTML tags are wrapped by a standard header and footer. For example, in the <a shape="rect" href="textfield.html">textfield</a> template, <code>text.ftl</code>, the <code>controlheader.ftl</code> and <code>controlfooter.ftl</code> templates are wrapped around the simple template.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<#-- -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ ---> -<input<#rt/> - type="${(parameters.type!"text")?html}"<#rt/> - name="${(parameters.name!"")?html}"<#rt/> -<#if parameters.get("size")?has_content> - size="${parameters.get("size")?html}"<#rt/> -</#if> -<#if parameters.maxlength?has_content> - maxlength="${parameters.maxlength?html}"<#rt/> -</#if> -<#if parameters.nameValue??> - value="${parameters.nameValue?html}"<#rt/> -</#if> -<#if parameters.disabled!false> - disabled="disabled"<#rt/> -</#if> -<#if parameters.readonly!false> - readonly="readonly"<#rt/> -</#if> -<#if parameters.tabindex?has_content> - tabindex="${parameters.tabindex?html}"<#rt/> -</#if> -<#if parameters.id?has_content> - id="${parameters.id?html}"<#rt/> -</#if> -<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" /> -<#if parameters.title?has_content> - title="${parameters.title?html}"<#rt/> -</#if> -<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" /> -<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" /> -<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" /> -/> -]]></script> -</div></div><h3 id="css_xhtmltheme-CSSXHTMLthemeheader">CSS XHTML theme header</h3><p>The header used by the HTML tags in the css_xhtml theme is complicated. Unlike the <a shape="rect" href="xhtml-theme.html">xhtml theme</a>, the CSS theme does not use a <code>labelposition</code> attribute. Instead, the label position is defined by CSS rules.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<#-- -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ ---> -<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader-core.ftl"> -<#if !parameters.labelposition?? && (parameters.form.labelposition)??> -<#assign labelpos = parameters.form.labelposition/> -<#elseif parameters.labelposition??> -<#assign labelpos = parameters.labelposition/> -</#if> -<#if (labelpos!"top") == 'top'> -<div <#rt/> -<#else> -<span <#rt/> -</#if> -<#if parameters.id??>id="wwctrl_${parameters.id}"<#rt/></#if> class="wwctrl"> - -]]></script> -</div></div><p>Note that the <code>fieldErrors</code>, usually caused by <a shape="rect" href="validation.html">Validation</a>, are displayed in a <code>div</code> block before the element is displayed.</p><h3 id="css_xhtmltheme-CSSXHTMLthemefooter">CSS XHTML theme footer</h3><p>And the <code>controlfooter.ftl</code> contents:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<#-- -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ ---> -${parameters.after!}<#t/> - <#lt/> -<#if !parameters.labelposition?? && (parameters.form.labelposition)??> -<#assign labelpos = parameters.form.labelposition/> -<#elseif parameters.labelposition??> -<#assign labelpos = parameters.labelposition/> -</#if> -<#if (labelpos!"top") == 'top'> -</div> <#rt/> -<#else> -</span> <#rt/> -</#if> -<#if (parameters.errorposition!"top") == 'bottom'> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> -<#if hasFieldErrors> -<div <#rt/><#if parameters.id??>id="wwerr_${parameters.id}"<#rt/></#if> class="wwerr"> -<#list fieldErrors[parameters.name] as error> - <div<#rt/> - <#if parameters.id??> - errorFor="${parameters.id}"<#rt/> - </#if> - class="errorMessage"> - ${error?html} - </div><#t/> -</#list> -</div><#t/> -</#if> -</#if> -</div> -]]></script> -</div></div><h2 id="css_xhtmltheme-SpecialInterest">Special Interest</h2><p>Two css_xhtml templates of special interest are <code>head</code> and <code>form</code>.</p><h3 id="css_xhtmltheme-Headtemplate">Head template</h3><p>The css_xhtml <a shape="rect" href="head.html">head</a> template is similar to the xhtml head template. The difference is that CSS is used to provide the layout.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<#-- -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ ---> -<link rel="stylesheet" href="<@s.url value='/struts/css_xhtml/styles.css' includeParams='none' encode='false' />" type="text/css" /> -<#include "/${parameters.templateDir}/simple/head.ftl" /> -]]></script> -</div></div><p>The head includes a style sheet.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.wwFormTable {} -.label { - font-style:italic; - float:left; - width:30% -} -.errorLabel {font-style:italic; color:red; } -.errorMessage {font-weight:bold; color:red; } -.checkboxLabel {} -.checkboxErrorLabel {color:red; } -.required {color:red;} - -.tdTransferSelect {text-align:center; vertical-align:middle;} -.tdLabelTop {text-align:left; vertical-align:top;} -.tdCheckboxLabel {text-align:right; vertical-align:top;} -.tdCheckboxInput {text-align:left; vertical-align:top;} -.tdCheckboxErrorMessage {text-align:left; vertical-align:top;} -.tdErrorMessage {text-align:center; vertical-align:top;} -.formButton {text-align:right;} -]]></script> -</div></div><h3 id="css_xhtmltheme-Formtemplate">Form template</h3><p>The css_xhtml <a shape="rect" href="form.html">form</a> template is almost exactly like the <a shape="rect" href="xhtml-form-template.html">xhtml form template</a>, including support for <a shape="rect" href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side Validation</a>. The difference is that instead of printing out an opening and closing <code><table></code> element, there are no elements. Instead, the CSS rules for the individual HTML tags are assumed to handle all display logic. However, as noted, client-side validation is still supported.</p></div> + <div id="ConfluenceContent"><p>The css_xhtml theme provides all the basics that the <a shape="rect" href="simple-theme.html">simple theme</a> provides and adds several features.</p><ul><li>Standard two-column CSS-based layout, using <code><div></code> for the HTML <a shape="rect" href="struts-tags.html">Struts Tags</a> (<a shape="rect" href="form.html">form</a>, <a shape="rect" href="textfield.html">textfield</a>, <a shape="rect" href="select.html">select</a>, etc)</li><li>Labels for each of the HTML <a shape="rect" href="struts-tags.html">Struts Tags</a>, placed according to the CSS stylesheet</li><li><a shape="rect" href="validation.html">Validation</a> and error reporting</li><li><a shape="rect" href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side Validation</a> using 100% JavaScript on the browser</li></ul><h2 id="css_xhtmltheme-WrappingtheSimpleTheme">Wrapping the Simple Theme</h2><p>The xhtml theme uses the "wrapping" technique descr ibed by <a shape="rect" href="extending-themes.html">Extending Themes</a>. Let's look at how the HTML tags are wrapped by a standard header and footer. For example, in the <a shape="rect" href="textfield.html">textfield</a> template, <code>text.ftl</code>, the <code>controlheader.ftl</code> and <code>controlfooter.ftl</code> templates are wrapped around the simple template.</p><plain-text-body>{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/simple/text.ftl}</plain-text-body><h3 id="css_xhtmltheme-CSSXHTMLthemeheader">CSS XHTML theme header</h3><p>The header used by the HTML tags in the css_xhtml theme is complicated. Unlike the <a shape="rect" href="xhtml-theme.html">xhtml theme</a>, the CSS theme does not use a <code>labelposition</code> attribute. Instead, the label position is defined by CSS rules.</p><plain-text-body>{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/controlheader.ftl}</plain-text-body><p>Note that the <code>fie ldErrors</code>, usually caused by <a shape="rect" href="validation.html">Validation</a>, are displayed in a <code>div</code> block before the element is displayed.</p><h3 id="css_xhtmltheme-CSSXHTMLthemefooter">CSS XHTML theme footer</h3><p>And the <code>controlfooter.ftl</code> contents:</p><plain-text-body>{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/controlfooter.ftl}</plain-text-body><h2 id="css_xhtmltheme-SpecialInterest">Special Interest</h2><p>Two css_xhtml templates of special interest are <code>head</code> and <code>form</code>.</p><h3 id="css_xhtmltheme-Headtemplate">Head template</h3><p>The css_xhtml <a shape="rect" href="head.html">head</a> template is similar to the xhtml head template. The difference is that CSS is used to provide the layout.</p><plain-text-body>{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/head.ftl}</plain-text-body><p>The head includes a style sheet.</p><plain-text-body>{snippet:id =all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/styles.css}</plain-text-body><h3 id="css_xhtmltheme-Formtemplate">Form template</h3><p>The css_xhtml <a shape="rect" href="form.html">form</a> template is almost exactly like the <a shape="rect" href="xhtml-form-template.html">xhtml form template</a>, including support for <a shape="rect" href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side Validation</a>. The difference is that instead of printing out an opening and closing <code><table></code> element, there are no elements. Instead, the CSS rules for the individual HTML tags are assumed to handle all display logic. However, as noted, client-side validation is still supported.</p></div> </div> <div class="tabletitle"> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/customvalidator-annotation.html ---------------------------------------------------------------------- diff --git a/content/docs/customvalidator-annotation.html b/content/docs/customvalidator-annotation.html index e3c052d..e86dc66 100644 --- a/content/docs/customvalidator-annotation.html +++ b/content/docs/customvalidator-annotation.html @@ -152,7 +152,7 @@ under the License. <h2 id="CustomValidatorAnnotation-Examples">Examples</h2> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ @CustomValidator(type ="customValidatorName", fieldName = "myField") ]]></script> </div></div> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/date-validator.html ---------------------------------------------------------------------- diff --git a/content/docs/date-validator.html b/content/docs/date-validator.html index 72f1657..ebe813b 100644 --- a/content/docs/date-validator.html +++ b/content/docs/date-validator.html @@ -161,7 +161,7 @@ using expression can be slightly slower, see the example below.</p> <h1 id="datevalidator-Examples">Examples</h1> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ <validators> <!-- Plain Validator syntax --> <validator type="date"> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/date.html ---------------------------------------------------------------------- diff --git a/content/docs/date.html b/content/docs/date.html index bb75f20..4b54864 100644 --- a/content/docs/date.html +++ b/content/docs/date.html @@ -195,7 +195,7 @@ Following how the date component will work, depending on the value of nice attri <h2 id="date-Examples">Examples</h2> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ <s:date name="person.birthday" format="dd/MM/yyyy" /> <s:date name="person.birthday" format="%{getText('some.i18n.key')}" /> <s:date name="person.birthday" nice="true" /> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/daterangefieldvalidator-annotation.html ---------------------------------------------------------------------- diff --git a/content/docs/daterangefieldvalidator-annotation.html b/content/docs/daterangefieldvalidator-annotation.html index b937214..6963860 100644 --- a/content/docs/daterangefieldvalidator-annotation.html +++ b/content/docs/daterangefieldvalidator-annotation.html @@ -154,7 +154,7 @@ under the License. <h2 id="DateRangeFieldValidatorAnnotation-Examples">Examples</h2> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ @DateRangeFieldValidator(message = "Default message", key = "i18n.key", shortCircuit = true, min = "2005/01/01", max = "2005/12/31") ]]></script> </div></div></div> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/default-workflow-interceptor.html ---------------------------------------------------------------------- diff --git a/content/docs/default-workflow-interceptor.html b/content/docs/default-workflow-interceptor.html index cba3b9e..a9eccfb 100644 --- a/content/docs/default-workflow-interceptor.html +++ b/content/docs/default-workflow-interceptor.html @@ -191,7 +191,7 @@ an action / field error is found.</li></ul> <h2 id="DefaultWorkflowInterceptor-Examples">Examples</h2> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ <action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="params"/> http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/dispatcher-result.html ---------------------------------------------------------------------- diff --git a/content/docs/dispatcher-result.html b/content/docs/dispatcher-result.html index 68ab26c..305b872 100644 --- a/content/docs/dispatcher-result.html +++ b/content/docs/dispatcher-result.html @@ -159,7 +159,7 @@ is made.</li></ul><p></p><ul><li>Otherwise, {@link RequestDispatcher#include(jav is called.</li></ul><p></p><h2 id="DispatcherResult-Parameters">Parameters</h2><p> </p><p></p><ul></ul><p></p><ul><li><b>location (default)</b> - the location to go to after execution (ex. jsp).</li></ul><p></p><ul><li><b>parse</b> - true by default. If set to false, the location param will not be parsed for Ognl expressions.</li></ul><p></p> <h2 id="DispatcherResult-Examples">Examples</h2><p></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[ <result name="success" type="dispatcher"> <param name="location">foo.jsp</param> </result>