You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2008/04/05 17:13:10 UTC
svn commit: r645115 - in /ofbiz/trunk/framework:
example/webapp/example/WEB-INF/ example/webapp/example/ajax/
example/widget/example/ images/webapp/images/ widget/dtd/
widget/src/org/ofbiz/widget/form/ widget/src/org/ofbiz/widget/html/
widget/src/org/o...
Author: jonesde
Date: Sat Apr 5 08:13:09 2008
New Revision: 645115
URL: http://svn.apache.org/viewvc?rev=645115&view=rev
Log:
Added background-submit-refresh-target to form field submit, auto-update-target to screen container; also added example that uses thetainer; also updated example to use these new ajax features
Removed:
ofbiz/trunk/framework/example/webapp/example/ajax/
Modified:
ofbiz/trunk/framework/example/webapp/example/WEB-INF/controller.xml
ofbiz/trunk/framework/example/widget/example/ExampleAjaxScreens.xml
ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
ofbiz/trunk/framework/images/webapp/images/selectall.js
ofbiz/trunk/framework/widget/dtd/widget-form.xsd
ofbiz/trunk/framework/widget/dtd/widget-screen.xsd
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
Modified: ofbiz/trunk/framework/example/webapp/example/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/webapp/example/WEB-INF/controller.xml?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/webapp/example/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/framework/example/webapp/example/WEB-INF/controller.xml Sat Apr 5 08:13:09 2008
@@ -146,6 +146,9 @@
<request-map uri="FormWidgetExamples"><security https="true" auth="true"/><response name="success" type="view" value="FormWidgetExamples"/></request-map>
<request-map uri="LookupExampleFeature"><security https="true" auth="true"/><response name="success" type="view" value="LookupExampleFeature"/></request-map>
+
+ <request-map uri="ListExampleFormOnly"><security https="true" auth="true"/><response name="success" type="view" value="ListExampleFormOnly"/></request-map>
+ <request-map uri="CreateExampleFormOnly"><security https="true" auth="true"/><response name="success" type="view" value="CreateExampleFormOnly"/></request-map>
<!-- end of request mappings -->
<!-- View Mappings -->
@@ -166,8 +169,8 @@
<!-- ajax view mappings -->
<view-map name="findExampleAjax" type="screen" page="component://example/widget/example/ExampleAjaxScreens.xml#AjaxExample"/>
- <view-map name="listExamples" type="screen" page="component://example/widget/example/ExampleAjaxScreens.xml#listExamples"/>
- <view-map name="createExampleForm" type="screen" page="component://example/widget/example/ExampleAjaxScreens.xml#createScreenForm"/>
+ <view-map name="ListExampleFormOnly" type="screen" page="component://example/widget/example/ExampleAjaxScreens.xml#ListExampleFormOnly"/>
+ <view-map name="CreateExampleFormOnly" type="screen" page="component://example/widget/example/ExampleAjaxScreens.xml#CreateExampleFormOnly"/>
<!-- end of view mappings -->
</site-conf>
Modified: ofbiz/trunk/framework/example/widget/example/ExampleAjaxScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/widget/example/ExampleAjaxScreens.xml?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/widget/example/ExampleAjaxScreens.xml (original)
+++ ofbiz/trunk/framework/example/widget/example/ExampleAjaxScreens.xml Sat Apr 5 08:13:09 2008
@@ -27,7 +27,6 @@
<set field="headerItem" value="AjaxExample"/>
<set field="titleProperty" value="PageTitleFindExample"/>
- <set field="layoutSettings.javaScripts[+0]" value="/images/prototypejs/validation.js" global="true"/>
<set field="layoutSettings.javaScripts[+0]" value="/images/prototypejs/prototype.js" global="true"/>
</actions>
<widgets>
@@ -39,13 +38,10 @@
</condition>
<widgets>
<container><label style="h1">${uiLabelMap.${titleProperty}}</label></container>
- <container id="example-list">
- <include-screen name="listExamples"/>
+ <container id="ListExamplesAutoUpdate" auto-update-target="ListExampleFormOnly">
+ <include-screen name="ListExampleFormOnly"/>
</container>
- <container/>
- <container id="create-form">
- <include-screen name="createScreenForm"/>
- </container>
+ <include-screen name="CreateExampleFormOnly"/>
</widgets>
<fail-widgets>
<label style="h3">${uiLabelMap.ExampleViewPermissionError}</label>
@@ -57,33 +53,28 @@
</section>
</screen>
- <screen name="listExamples">
+ <screen name="ListExampleFormOnly">
<section>
<actions>
- <entity-condition entity-name="Example" list-name="examples"/>
+ <!-- NOTE: these are needed because this may be run as a top level screen and would have no decorator -->
+ <property-map resource="ExampleUiLabels" map-name="uiLabelMap" global="true"/>
+ <property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
</actions>
<widgets>
- <container id="list-example-table">
- <platform-specific><html><html-template location="component://example/webapp/example/ajax/listExamplesAjax.ftl"/></html></platform-specific>
- </container>
+ <include-form name="ListExamples" location="component://example/widget/example/ExampleForms.xml"/>
</widgets>
</section>
</screen>
-
- <screen name="createScreenForm">
+ <screen name="CreateExampleFormOnly">
<section>
<actions>
- <entity-condition entity-name="ExampleType" list-name="types"/>
- <entity-condition entity-name="StatusItem" list-name="statusItems">
- <condition-expr field-name="statusTypeId" operator="equals" value="EXAMPLE_STATUS"/>
- <order-by field-name="sequenceId"/>
- </entity-condition>
+ <!-- these are only needed so that when bsh evaluates use-when attributes these will exist and not cause an error -->
+ <set field="exampleId" from-field="parameters.exampleId"/>
+ <entity-one entity-name="Example" value-name="example"/>
</actions>
<widgets>
- <container id="create-example-form">
- <platform-specific><html><html-template location="component://example/webapp/example/ajax/createExampleAjax.ftl"/></html></platform-specific>
- </container>
+ <include-form name="EditExampleBackgroundSubmit" location="component://example/widget/example/ExampleForms.xml"/>
</widgets>
</section>
</screen>
-</screens>
\ No newline at end of file
+</screens>
Modified: ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/widget/example/ExampleForms.xml?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/widget/example/ExampleForms.xml (original)
+++ ofbiz/trunk/framework/example/widget/example/ExampleForms.xml Sat Apr 5 08:13:09 2008
@@ -20,10 +20,9 @@
<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">
- <form name="ListExamples" type="list" list-name="examples"
- paginate-target="FindExample">
+ <form name="ListExamples" type="list" list-name="examples" paginate-target="FindExample">
<actions>
- <entity-condition entity-name="Example"><order-by field-name="description"/></entity-condition>
+ <entity-condition entity-name="Example"><order-by field-name="exampleName"/></entity-condition>
</actions>
<field name="exampleId" title="${uiLabelMap.ExampleExampleId}" widget-style="buttontext">
@@ -34,6 +33,7 @@
<field name="statusId" title="${uiLabelMap.CommonStatus}"><display-entity entity-name="StatusItem"/></field>
<field name="description" title="${uiLabelMap.CommonDescription}"><display/></field>
</form>
+
<form name="EditExample" type="single" target="updateExample" title="" default-map-name="example">
<actions>
<entity-one entity-name="StatusItem" value-name="currentStatus" auto-field-map="false">
@@ -87,6 +87,10 @@
<field name="submitButton" use-when="example==null" title="${uiLabelMap.CommonCreate}"><submit button-type="button"/></field>
<field name="submitButton" use-when="example!=null" title="${uiLabelMap.CommonUpdate}"><submit button-type="button"/></field>
+ </form>
+ <form name="EditExampleBackgroundSubmit" extends="EditExample">
+ <field name="submitButton" use-when="example==null" title="${uiLabelMap.CommonCreate}"><submit button-type="button" background-submit-refresh-target="CreateExampleFormOnly"/></field>
+ <field name="submitButton" use-when="example!=null" title="${uiLabelMap.CommonUpdate}"><submit button-type="button" background-submit-refresh-target="CreateExampleFormOnly"/></field>
</form>
<!-- ExampleItem -->
Modified: ofbiz/trunk/framework/images/webapp/images/selectall.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/selectall.js?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/selectall.js (original)
+++ ofbiz/trunk/framework/images/webapp/images/selectall.js Sat Apr 5 08:13:09 2008
@@ -208,6 +208,17 @@
}
}
+// NOTE: REQUIRES prototype.js
+// On the form element make sure you have something like:
+// id="theFormId"
+// On the submit button elements make sure you have something like:
+// onclick="javascript:submitAjaxForm($('theFormId'), 'id-of-div-surrounding-or-on-form', '<@o...@ofbizUrl>');"
+function submitFormInBackground(form, areaName, submitUrl) {
+ submitFormDisableSubmits(form);
+ new Ajax.Request(form.action, { parameters: form.serialize(true) });
+ new Ajax.Updater(areaName, submitUrl);
+}
+
function submitFormDisableSubmits(form) {
for (var i=0;i<form.length;i++) {
var formel = form.elements[i];
Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Sat Apr 5 08:13:09 2008
@@ -43,7 +43,8 @@
</xs:element>
<xs:attributeGroup name="attlist.form">
<xs:attribute type="xs:string" name="name" use="required"/>
- <xs:attribute name="type" use="required">
+ <xs:attribute name="type">
+ <xs:annotation><xs:documentation>The form type is always required unless you are extending another form.</xs:documentation></xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="single">
@@ -793,6 +794,9 @@
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:string" name="image-location"/>
+ <xs:attribute type="xs:string" name="background-submit-refresh-target">
+ <xs:annotation><xs:documentation>This will submit the form in the background and refresh just this form and not the rest of the page. Note that the button-type must be button.</xs:documentation></xs:annotation>
+ </xs:attribute>
</xs:attributeGroup>
<xs:element name="text" substitutionGroup="AllFields">
<xs:complexType>
Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-screen.xsd?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-screen.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-screen.xsd Sat Apr 5 08:13:09 2008
@@ -754,6 +754,7 @@
<xs:attributeGroup name="attlist.container">
<xs:attribute type="xs:string" name="id"/>
<xs:attribute type="xs:string" name="style"/>
+ <xs:attribute type="xs:string" name="auto-update-target"/>
</xs:attributeGroup>
<xs:element name="image" substitutionGroup="AllWidgets">
<xs:complexType mixed="true">
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Sat Apr 5 08:13:09 2008
@@ -1920,7 +1920,12 @@
* @return
*/
public String getContainerId() {
- return this.containerId;
+ // use the name if there is no id
+ if (UtilValidate.isNotEmpty(this.containerId)) {
+ return this.containerId;
+ } else {
+ return this.getName();
+ }
}
/**
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Sat Apr 5 08:13:09 2008
@@ -2726,6 +2726,7 @@
public static class SubmitField extends FieldInfo {
protected String buttonType;
protected String imageLocation;
+ protected FlexibleStringExpander backgroundSubmitRefreshTargetExdr;
protected SubmitField() {
super();
@@ -2743,6 +2744,7 @@
super(element, modelFormField);
this.buttonType = element.getAttribute("button-type");
this.imageLocation = element.getAttribute("image-location");
+ this.backgroundSubmitRefreshTargetExdr = new FlexibleStringExpander(element.getAttribute("background-submit-refresh-target"));
}
public void renderFieldString(StringBuffer buffer, Map context, FormStringRenderer formStringRenderer) {
@@ -2775,6 +2777,10 @@
*/
public void setImageLocation(String string) {
imageLocation = string;
+ }
+
+ public String getBackgroundSubmitRefreshTarget(Map context) {
+ return this.backgroundSubmitRefreshTargetExdr.expandString(context);
}
}
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java Sat Apr 5 08:13:09 2008
@@ -823,7 +823,6 @@
public void renderSubmitField(StringBuffer buffer, Map context, SubmitField submitField) {
ModelFormField modelFormField = submitField.getModelFormField();
ModelForm modelForm = modelFormField.getModelForm();
- String singleClickAction = " onClick=\"javascript:submitFormDisableButton(this)\" ";
String event = null;
String action = null;
@@ -867,15 +866,18 @@
buffer.append("=\"");
buffer.append(action);
buffer.append('"');
- } else {
- // disabling for now, using form onSubmit action instead: buffer.append(singleClickAction);
}
buffer.append("/>");
} else {
// default to "button"
- buffer.append("<input type=\"submit\"");
+ String backgroundSubmitRefreshTarget = submitField.getBackgroundSubmitRefreshTarget(context);
+ if (UtilValidate.isNotEmpty(backgroundSubmitRefreshTarget)) {
+ buffer.append("<input type=\"button\"");
+ } else {
+ buffer.append("<input type=\"submit\"");
+ }
appendClassNames(buffer, context, modelFormField);
@@ -902,6 +904,19 @@
} else {
//add single click JS onclick
// disabling for now, using form onSubmit action instead: buffer.append(singleClickAction);
+ }
+
+ if (UtilValidate.isNotEmpty(backgroundSubmitRefreshTarget)) {
+ // onclick="javascript:submitFormInBackground($('EditExampleBackgroundSubmit'), 'EditExampleBackgroundSubmit', '<@o...@ofbizUrl>');"
+ String formId = submitField.getModelFormField().getModelForm().getContainerId();
+ String formContainerId = submitField.getModelFormField().getModelForm().getContainerId();
+ buffer.append(" onclick=\"javascript:submitFormInBackground($('");
+ buffer.append(formId);
+ buffer.append("'), '");
+ buffer.append(formContainerId);
+ buffer.append("', '");
+ this.appendOfbizUrl(buffer, backgroundSubmitRefreshTarget);
+ buffer.append("');\"");
}
buffer.append("/>");
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java Sat Apr 5 08:13:09 2008
@@ -91,6 +91,21 @@
public void renderContainerEnd(Writer writer, Map context, ModelScreenWidget.Container container) throws IOException {
writer.write("</div>");
appendWhitespace(writer);
+ String autoUpdateTarget = container.getAutoUpdateTargetExdr(context);
+ String containerId = container.getId(context);
+ if (UtilValidate.isNotEmpty(autoUpdateTarget) && UtilValidate.isNotEmpty(containerId)) {
+ HttpServletResponse response = (HttpServletResponse) context.get("response");
+ HttpServletRequest request = (HttpServletRequest) context.get("request");
+ ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
+ RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
+
+ writer.write("<script type=\"text/javascript\">new Ajax.PeriodicalUpdater('");
+ writer.write(containerId);
+ writer.write("', '");
+ writer.write(rh.makeLink(request, response, autoUpdateTarget));
+ writer.write("');</script>");
+ appendWhitespace(writer);
+ }
}
public void renderScreenletBegin(Writer writer, Map context, boolean collapsed, ModelScreenWidget.Screenlet screenlet) throws IOException {
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=645115&r1=645114&r2=645115&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Sat Apr 5 08:13:09 2008
@@ -262,12 +262,14 @@
public static class Container extends ModelScreenWidget {
protected FlexibleStringExpander idExdr;
protected FlexibleStringExpander styleExdr;
+ protected FlexibleStringExpander autoUpdateTargetExdr;
protected List<ModelScreenWidget> subWidgets;
public Container(ModelScreen modelScreen, Element containerElement) {
super(modelScreen, containerElement);
this.idExdr = new FlexibleStringExpander(containerElement.getAttribute("id"));
this.styleExdr = new FlexibleStringExpander(containerElement.getAttribute("style"));
+ this.autoUpdateTargetExdr = new FlexibleStringExpander(containerElement.getAttribute("auto-update-target"));
// read sub-widgets
List subElementList = UtilXml.childElementList(containerElement);
@@ -297,8 +299,12 @@
return this.styleExdr.expandString(context);
}
+ public String getAutoUpdateTargetExdr(Map context) {
+ return this.autoUpdateTargetExdr.expandString(context);
+ }
+
public String rawString() {
- return "<container id=\"" + this.idExdr.getOriginal() + "\" style=\"" + this.styleExdr.getOriginal() + "\">";
+ return "<container id=\"" + this.idExdr.getOriginal() + "\" style=\"" + this.styleExdr.getOriginal() + "\" auto-update-target=\"" + this.autoUpdateTargetExdr.getOriginal() + "\">";
}
}