+1
I have wanting to do this for long.
Sent from my iPhone
On Mar 1, 2009, at 10:30 AM, guo weizhan <[email protected]> wrote:
Hi all,
We are creating the "theme" for the ofbiz widget form, why we create
this? We found it's very difficultty to extend the current form
widget, all the widget generation code is hard code in
HtmlFormRenderer, we need to change this file if we want to add some
function to the form, like ajax.
And yes, we have some ajax function in ofbiz now, but the code of
HtmlFormRenderer with ajax is much harder for understanding. like
the code: "if(ajaxEnabled)". In fact , we want to implement the dojo
function in ofbiz without mess.
So we decide to extract the hard code is responsible for the html
form generation to the ftl files, like the struts2 does. If you
know well about struts2, then you will also know the form theme we
are creating.
Those ftl files is responsible for the html code generation, like
text.ftl:
<input type="text"<#rt/>
name="${rp.name?default("")?html}"<#rt/>
<#include "class.ftl" />
<#if rp.value?exists>
<#escape x as x?html> value="${rp.value}" </#escape> <#rt/>
</#if>
<#if rp.textSize?exists>
size="${rp.textSize?html}"<#rt/>
</#if>
<#if rp.maxlength?exists>
maxlength="${rp.maxlength?html}"<#rt/>
</#if>
<#if rp.textId?exists>
id="${rp.textId?html}"<#rt/>
</#if>
<#if rp.event?exists && rp.action?exists>
${rp.event?html}="${rp.action?html}"<#rt/>
</#if>
<#if rp.clientAutocomplete?exists && !rp.clientAutocomplete>
autocomplete="off"<#rt/>
</#if>
/>
Then, in the renderTextField method, we use the ftl file to generate
the html text instand of the hard code.
Finally,we can have different themes like simple/text.ftl ajax/
text.ftl and dojo/text.ftl. By setting the theme with code
"theme=simple/ajax/dojo " , the corresponding theme file like
text.ftl will be loaded. The attachment is the dojo theme capture.
If you are interested or have any advises, we can discuss it in
detail.