• feature: added callback to operation instead of exec method. Avoids if else ladder in after() and conveniently keeps logic in the action and makes the form (ZOperation) dumb. Makes form object part of the view layer. Separates form logic from form data, so passive/active separation is finally clean. Means ZOperation has no longer exec method, as this would lead to active code in the form. See blueprints for the recommended application architecture.
  • feature: Added support for standalone calls from outside http requests (like scheduler job)
  • feature: Action parameters can be enums now
  • feature: added ZSessionProperty: a property that stores its value in the session, so one can easily pass values from one Action to another in redirects.
  • api: renamed ZIForm (formerly ZIFormElement) to ZIFormModel
  • api: removed prefix from @ZCss and @ZJavaScript annotations to make it simpler
  • performance: adding caching to the renderer
  • to simplify form development removed the need to specify @ZExposeJson in forms (implementing ZIForm)
  • renamed ZIFormElement to ZIFormModel
  • added ZIServletService method
public void render(Object obj, String mimeType, String encoding) throws Exception
  • published the form dependendency management framework into separate project: http://zdependency.wiki.sourceforge.net/
  • api: separated form dependency management into its own project, so can be used on business-layer and form layer. Now supports multiple changes at once, like when a form is submitted and more than one value has changed. Also supports one change at a time, like in AJAX-call-on-input-field-change.
  • feature: added dependency graph export to graphml, so one can see the dependency graph and the processing steps in tools like yEd.
  • api: simplified and completely separated form processing from the action framework
  • api: added ZIFormService for form related methods
  • api: finalizing the form processing api
  • api: rewritten AJAX-Form package with jQuery which leads to less generated markup and better performance
  • api: added ZIFormElement update() to allow validation and setReadable() etc. that spans multiple properties to be placed in the containing ZIFormElement.
  • removed gzipping from ztemplates, do this in your webserver
  • upgraded to velocity 1.6.2
  • optimized script tag creation
  • added 'merge' property to ZJavaScript annotation for scripts that should not be merged with others
  • added 'standalone' property to ZJavaScript annotation for scripts that have no dependencies, so fewer merged js tags are created
  • added ZObjectProperty for keeping form state in hidden field
  • api: added ZIAjaxChangeListener to properties and removed the dependency declarations. This leads to code that is easier to understand because developers are used to listeners, and it fits most cases. Also it may lead to ajaxchangelisteners that can be executed on the client in javascript (like the stringValidators).
  • api: removed support for parameter names with .(dot) as it's best to use forms for this. So either process the parameters in the action or in a form object.
  • api: moved ZYuiLoaderAction to ztemplates-yui.jar so it's in the same place as the loaded resources
  • api: moved ZFormScript to ztemplates-ui-form.jar in package org.ztemplates.web.ui.form.script
  • api: added ZIFormElement interface to mark a form element (part of a form)
    • made parametrizable and added getValue/setValue so it behaves much like a ZProperty that consists of other ZProperties
    • merged with ZIFormElementWithState and ZIFormElementWithValue, so only one interface left, makes it simpler
  • api: added ZFormUtil.setReadonly(form) that sets forms to readonly
  • api: added ZOperation.getAllowedValue for setting the value of the Operation that is submitted to the client
  • api: added ZIntRegexValidator
  • added @ZHttpHeaders and @ZHttpHeader annotation on renderpojos to automatically set response headers when rendering response to http
  • removed onRender callback for render-pojos, as render-pojos should be instantiated after all display data has been computed, so programmer should pass all needed data in constructor.
  • feature: added client side javascript validation
    • api: added client-side ZOperationValidator that checks operation can be executed (submit) only if theres no property error.
    • api: added ZRegexValidator for regex client and server side validations
    • api: added validators for ZProperty and ZOperation
  • feature: ported build process to maven

ztemplates-ui-form-1.2 (not yet released)#

  • rewrite using jQuery, as its more inobtrusive, more freedom, faster
  • added ZInputHidden
  • feature: added client side javascript validation
    • api: added @ZScript.property to specify runtime javascript dependencies. Used in ZFormScript implementation to include validator javascript.
    • api: added parameter value to ZTEMPLATES.reloadState and ZTEMPLATES.forms.${formId}.reloadState
    • api: added javascript function ZTEMPLATES.updateStyle to ZFormScript
  • api: moved ZFormScript from ztemplates to ztemplates-ui-form in package org.ztemplates.web.ui.form.script
  • api: added ZFormScript.setBeforeunloadMessage to alert for modified, unsubmitted forms
  • optimized size of generated javascript
  • because IE6 does not support chained css classes had to change the css handling for error/required. Mainly had to change like this: .${cssId}-input.error to .${cssId}-input_error
  • added ZFormTextArea with autoresize functionality
  • extended ZFormInputState to display errors from multiple properties
  • fixed incompatibility with new YUI 2.6.0 autocomplete datasources
  • added call to ZTEMPLATES.updateStyle to tag input elements with corrresponding classes
  • renamed ZInputState to ZFormInputState
  • renamed ZTextInput to ZFormText
  • renamed ZAutocomplete to ZFormAutocomplete
  • renamed ZDivHiderScript to ZFormDivHiderScript
  • bugfix: added dependency to animation.js to ZInputText
  • added setCssId to all form ui components

ztemplates- (released 21.09.2008) AJAX form processing release#

api: added ZProperty.label property. This is intended to be used in Error messages for a property.

api: added ZOperation.exec method

demo: added sample AJAX form http://ztemplates.org/samples-form/

api: added ZProperty dependsOn in constructor. Now can declare which property depends on which and use ZProperty.updateValue and updateState to update form state depending on ajax trigger. Does topological sort on dependency graph to call updateValue methods in right order and only once.

api: added ZProperty.updateValue and updateState for use in AJAX form processing

api: added @ZMatch.form property and callbacks before/after form called before and after form parameters are assigned to action-pojo. Use to initialize form object.

feature: added AJAX form validation and management support when using ZProperty.

feature: added ZExposeJSON annotation to allow exposing server side form state to json object usable for ajax form manpulation.

api: added ZIRenderService.getCssId

feature: now can override cssId by defining a getter getCssId in your view-pojo to override default styles.

api: ZProperty.parse and ZProperty.format are now public, change your definitions from protected to public

bugfix: for WEB-INF/classes bug https://sourceforge.net/tracker/index.php?func=detail&aid=2023972&group_id=157577&atid=804385

api: for easier form processing: now can specify form in @ZMatch parameter definition example: @ZMatch(value = "/", parameters = {"myform.prop1"}) Define a getter for myform and a property prop1 in myform.

api: removed class ZI18n, use ZIMessageService instead which allows to override the default messages.

api: added ZIMessageService to allow easy way to plug in error-messages and i18n.

api: added boolean ZOperation.isCalled to permit execution check for form operations.

api: changed the service creation mechanism. Extend the service implementation or add new service by adding your own ServletContextListener to register your own service factory.

impl: removed dangling references in ZTemplates, that kept some objects longer around than needed

impl: removed the dependency from servlet spec 2.5 containers, now runs in tomcat 5

impl: internal refactoring, dependency cleanup

ztemplates- (released 28.06.2008)#

bugfix: fixed http://sourceforge.net/tracker/index.php?func=detail&aid=2004808&group_id=157577&atid=804385 tomcat 6.0.16 problem

api: now you can create action-pojos with a private default (no arguments) constructor. ztemplates will make the no arguments constructor accessible and call it when handling actions.

internal-api: changed classpathservice api to allow access to class by inputstream

impl: extracted ztemplates-classpath as a separate project zclasspath, as it is also used in ztest You will have to add the jar to your project

ztemplates-yui-0.1.5 (not yet released)#

api: added carousel component http://billwscott.com/carousel

api: added star rating component

ztemplates-ztest-0.3.3 (released 25.05.2008)#

feature: added ztests that allow you to check and enforce your application architecture!

ztemplates- (released 05.05.2008)#

api: ztemplates will merge, minify, compress and cache the js and css files from @ZScript to improve performance using JSMin. YUI Compressor did not work for all js files...

bugfix: fixed zscript-cycle bug

api: removed ZTemplates.getClasspathService. Access it under ZTemplates.getApplicationService()

api: added ZTemplates.getApplicationService()

impl: internal refactorings to reduce dependencies and improve testability. Reduced dependencies to Java Servlet classes.

impl: secured the admin info /ztemplates/admin with role ztemplates-admin

ztemplates- (released 20.04.2008)#

api: added support for FreeMarker, which seems to be somewhat faster than Velocity. See article in javaworld Support consists of ZFreeMarkerContextListener for initialisation and ZFreeMarkerRenderer for rendering

impl: removed all Velocity dependencies from ztemplates. Now could deploy without velocity.jar

config: extracted Velocity startup code from ZTemplatesContextListener and put it into separate ZVelocityContextListener. Reason: now you can choose not to use Velocity at all and use FreeMarker or other technology instead. You could also provide your own startup code. You will have to update your existing web-xml

	<!-- this must come first -->
	<!-- add this for Velocity support -->
	<!-- add this for FreeMarker support -->

api: Properties -- added ZListProperty, ZStringListProperty, ZBigDecimalListProperty, ZDateListProperty, ZLongListProperty, ZIntListProperty. Now one url variable can carry multiple values, separated by separator, default "-".

api: removed the shouldGenerateComments initParameter for performance reasons

config: added context-parameter to speed up application startup. This will restrict class scan at application startup to files accepted by the filter.

<!-- uncomment to optimize application startup time -->
      	Restrict classpath scan to jars/classes known to contain ztemplates-relevant classes.
      	Best YourClassPathFilter extends ZDefaultClassPathFilter

ztemplates- (released 29.03.2008)#

api: changed @ZScript variable handling, now the pojo(component) that exposes the ZScript has to provide variable value. Reason: better encapsulation and more typesafe: component can ask for values needed in constructor.

api: when using ZProperty annotation @ZGetter and @ZSetter are no longer required.

impl: added caching with version number for ztemplates.css

impl: if ZScript dependency graph has cycles, only will display warning and remove dependency edges till no more cycles in dependency graph instead of failing

api: added some classes from ztemplates-YUI, mainly the JS/JSON-related.

ztemplates-yui-0.1.4 (released 29.03.2008)#

api: added http://www.json.org classes for JSON

api: added accordion component from http://www.hedgerwow.com/360/mwd/accordion/demo.php and made it look like YUI-sam, fixed IE bug (flicker when collapsing)

docu: added example for Google AJAX Search

api: added netvibes rss reader component

api: refactorings, moved js base classes to ztemplates, renamed moved classes from Y... to Z...

ztemplates-yui-0.1.3 (released 16.03.2008)#

api: added support for autocomplete from JS Array and Flat file from server.

impl: added an expires header to response for js files to avoid reloading.

api: added sample Adobe Flex/Flash integration.

ztemplates- (released 09.03.2008)#

api: added ZIRenderService.createJavaScriptId for creating per request unique ids to use in AJAX code.

api: added support for google searchkey: now can use ${varname} in zscript value. ${varname} will be replaced at runtime with matching value exposed in render-pojo where @ZRenderer(zscript=true).

ztemplates-yui-0.1.2 (released 09.03.2008)#

impl: added overlay http://www.tagger24.com/feeds/1 then place mouse over text.

impl: added menu See running example at http://www.tagger24.com

impl: added sample google AJAX search with configurable keys. See running example at http://www.tagger24.com/tag/Clinton

impl: added sample jfreechart

impl: added slider

impl: refactored, now can set properties for constructor in all widgets

ztemplates-yui-0.1.1 #

impl: removed the YUI files from ztemplates-yui.jar to allow simple upgrades. Now only download latest yui_x.x.x.zip, rename to yui_x.x.x.jar and place into WEB-INF/lib.

impl: added sample tooltip, dialog and overlay

impl: added a AJAX google-search implementation (can see it in action under tagger24.com) then klick a tag.

0.9.9 (released 26.02.2008)#

feature: adding support for easy integration of AJAX components like YUI YahooUI integration

sample: added ztemplates-yui project that shows how to integrate ztemplates and YUI. This is not intended to be reused but as an example on how to do it. If someone is interested he could contribute to ztemplates by expanding this to a reusable library. Contact me at dev //@// gerdziegler //.// de

feature: added @ZScript annotation. Provides support for <script src="" type="text/javascript"> declarations on render-pojos that are collected and aggregated by ztemplates, so you need not worry how to deploy the javascript libs in AJAX applications. Also applies to css.

feature: added /ztemplates/admin application for infos about ztemplates, like url matching tree

feature: added 'contextPath' and 'zscript' to the default exposed values to the context when used in webapp. Exposed values can now be controlled by the @ZRenderer annotation.

optimization: the filter now caches urls it cannot match and dispatches without trying to match the url again.

bugfix: removed a api dependeny from ServletContext.getContextPath that allowed deployment only in newer web-containers.

api: renamed ZVelocityContextListener to ZTemplatesContextListener and moved it to org.ztemplates.web, because velocity is used by ztemplates itself and there are other initialisation tasks to be performed too. you will need to update your web.xml.

feature: added support for matching variable values which contain '/': use *{var} notation in your templates. Useful for accessing resources from a action-pojo deployed in a jar, in this case ztemplates-yui.jar Makes ZResourceServlet obsolete, will be removed from this version. you will need to update your web.xml (released 02.02.2008)#

impl: replaced the regex matching algorithm with a tree-based one. Allows better url collision detection.

impl: at first request, the match tree is print to console

api: class ZUrl and ZServletUrl are no longer available. Use ZTemplates.getServletService().createUrl()to create urls.

api: ZIServletService.createUrl() now throws Exception

api: renamed ZISecurityService to ZIEncryptionService

api: added @ZSecure annotation for access-control on action-pojos. Transparently creates secure url and triggers j2ee login. Checks for roles.

api: added ZISecurityService that provides support for the @ZSecure annotation

api: added ZIExceptionService that allows to plug in a custom exception handler

api: made the setter methods in ZTemplates public so you can mock up everything for unit-tests

api: added service configuration through web.xml. Full control over the services with init-parameters on servlet


api: ability to define your own services analogous to the built in services

api: added ZIServiceFactory/ZIServiceRepository that can be set on ZTemplates (in ThreadLocale) so you can provide/mock your own implementation (released 13.01.2008)#

form-api: renamed ZOperationProperty to ZOperation

form-api: if you use ZProperty for the url-variables, ztemplates will automatically call the revalidate method, first for ZProperty and then for ZOperation.

form-api: ZOperation now accepts other properties in the constructor. Its validation state will be marked as error if one of the other properties have an validation error.

api: a empty string assigned to a ZProperty will now be considered as null value.

impl: sorted the regex pattern created by the engine to avoid collisions and random behavior, so the most concrete pattern will be matched first. The patterns are looged out at startup, so you can see whats going on.

api: added new default value named 'cssId' to default exposed values that can be used to make css-styles refactoring safe. It contains a unique id that can be used in both template and css. In css use it like ${cssId} because it uses velocity to create the css.

api: ZProperty.revalidate returns boolean true if validation succeeded

api: added ZBigDecimalProperty (released 02.01.2008)#

api: moved ZIRenderService to org.ztemplates.render. A instance will always be exposed to the template under the name renderService, so now you can do $renderService.render($obj) from the template.

bugfix: reading null value from property throws exception

api: removed need to specify both @ZSetter and @ZGetter annotation when using ZProperty

feature: changed ZIServletService.sendRedirect so that it also works with Strings as parameter

api: added more properties in properties package

api: added context param to web.xml that enables template info in html comments if set to true.

Defaults to false if not set

      <description>Enable template details in output</description>

see also Bug Tracker (released 20.12.2007)#

api: added support for css fragments. Put css into a file in the same directory as the class annotated with @ZRenderer. ztemplates scans the classpath and aggregates all found css to a css-stylesheet accessible with <LINK rel="stylesheet" href="/your-contextPath/ztemplates.css">

api: added property-framework, that bundles values, validation state and formatting/parsing. (released 06.12.2007)#

api: added method sendRedirect(action) to ZIServletService

api: added method createUrl(action) to ZIServletService

bugfix: url-variables are not correctly url-encoded, so assigned values are scrambled for umlaut or space. fixed 24.11.2007)#

api: added support for encryption in ZTemplates.getSecurityService().encrypt/decrypt.

api: annotations now override convention ZGetter/getXxx @ZSetter/setXxx

bugfix: parameters are ignored when creating a url

bugfix: init methods need to be annotated with @ZInit to be called

functionality: changed default parameter setter behavior: if parameter comes with empty string as value will assign null to parameter instead of empty string.

api: added access to the ZClasspathService through ZTemplates.getClasspathService(), that allows the application to search for classes in the classpath by annotation or by assignableFrom. Gives the webapps access to the same auto-discovery features as the framework.

api: removed the ZRenderServlet, as only the filter is really needed. (released 18.11.2007)#

api: removed the @ZParameter annotation. Functionality was moved to @ZMatch that now declares the complete url format.

api: ztemplates-actions made everything refactoring-safe by introducing the following (facultative) annotations:

bugfix: render-pojos must be in some package, default package not allowed. as usually pojos are always in some package.

bugfix: if url from browser ends with '/' won't match. Fix by always removing trailing '/' before matching

bugfix: urls starting with a ${variable} will match empty strings.

examples: added Pageable Sortable List example


06.11.2007 Split the project in three, independent parts:

  • a rendering part, ztemplates-render, can also be used in other contexts as webapplications
  • a action processor, ztemplates-actions, can also be used in other contexts as webapplications
  • a web part, ztemplates-web, that uses the render and action part to process http requests. Contains a Filter and a Servlet

Older versions removed as applies no longer#

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-) was last changed on 23-Sep-2010 22:00 by gerdziegler.de