Requirement Constraints

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Wednesday, 6 June 2012

ViewModel Class Java Annotation @Init, @NotifyChange, @Command

Posted on 16:56 by Unknown

In following sections we'll list all syntaxes that can be used in implementing a ViewModel and applying ZK bind annotation.


The ZK binder is responsible for synchronizing data between the View and ViewModel. Typically the ViewModel is a POJO and has no reference to any UI component. Hence it cannot push data to a UI component. Developers have to specify the dependency of ViewModel's properties with ZK provided Java annotation, then binder knows when to reload which property and to update the UI view.
ZK bind provides a set of Java annotations ( @NotifyChange, @DependsOn,@NotifyChangeDisabled ) to specify when to reload which property to UI components. Developers have to specify it at design time, and the binder will synchronize data at run-time. The binder keeps track of binding relationships between component's attribute and ViewModel's property. After each time it invokes a ViewModel's
method (setter, getter, or command method), it looks for corresponding component attribute to reload according to specified properties in the annotation.
@NotifyChange
Syntax
@NotifyChange("anotherProperty")
@NotifyChange({"secondProperty","thirdProperty"})
@NotifyChange("*")
@NotifyChange(".")

Description
Target: method (setter or command method)
Purpose: To notify binder one or more properties change. By default, a property set by binder through setter method will notify this property changed without this annotation. You could use this annotation on setter method to override default notification target. You could also add this annotation on a command method to notify properties that are changed after command execution. To avoid the default notification, use @NotifyChangeDisabled on setter method solely. Giving "*" in annotation element means notify all properties in a View Model. Use "." to enforce reloading the instance of the class in where the annotation.

Let us put in simple words.
Assume that you have bind some components in the ZUL File with some variable. Let us say this variable name as var1.So whenever we change the value of var1, then the binder will automatically bind the modified value in the zul file. Assume that you are going to change this variable value on calling Somemethod(), then you could write as follows
@NotifyChange("var1")
public void Somemethod() {
var1 = “value changed”
}

Then whenever this somemethod is called, then binder will automatically take the latest value of var1 and bind to the control (assume that text area) and will be shown to the user.
*****************************************************************************************************************************************************
@Command
Syntax
@Command()
@Command("commanName")
@Command({"commanName1", "commandName2"})
Description
Target: method
Purpose: To identify a Command method.
The optional annotation's element is a String for command's name and that name is referenced in a ZUL with
event-command binding. If it's not provided, the method name is set as the command name by default.
*****************************************************************************************************************************************************

@Init

Description
Target: method
Purpose: Marker annotation to identify a initial method. Binder calls the method with this annotation when initializing a ViewModel. Only one or none init method is allowed in a ViewModel class. If you set annotation element superclass to true, the ViewModel's parent class's init method will be invoked first then child's, and this logic repeat on super class. If a class has no method with @Init, no
method will be called (including the super class's).

*****************************************************************************************************************************************************
Now the time is do small exercise based on the three above annotation. Here is the example
Let us use our existing ZK Project and will create additional two files such as Example5.zul and example5VM as shown here.
image_thumb[2]
example5.zul
<?page title="Practice List" contentType="text/html;charset=UTF-8"?>
<zk>

<window apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('ex.myexample.example5VM')">
<separator />
<div>
<button label="Click to Change Value 1" onClick="@command('hibtn1')"/>
<button label="Click to Change Value 2" onClick="@command('hibtn2')"/>
<button label="Click to Change Value 3" onClick="@command('hibtn3')"/>
<button label="Click to Change Value 4" onClick="@command('hibtn4')"/>
</div>
<separator />
<groupbox height="40px">
<space spacing="200px"/>
<label value="@load(vm.message)" style="color: #696569; font-size : 24px; font-weight: bold;"/>
</groupbox>
<separator />
</window>
</zk>

****************************************************************************
example5VM.java
package ex.myexample;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;

public class example5VM {
private String m1;

public String getMessage() {
return m1;
}

@Init
public void myInitialSetup() {
this.m1= "Intial value goes here, you can set up in the Init Method";
}

@Command
@NotifyChange("message")
public void hibtn1() {
m1= "Value Changed after Button 1 Clicked";
}

@Command
@NotifyChange("message")
public void hibtn2() {
m1= "Value Changed after Button 2 Clicked";
}

@Command
@NotifyChange("message")
public void hibtn3() {
m1= "Value Changed after Button 3 Clicked";
}

@Command
public void hibtn4() {
m1= "Value Changed after Button 4 Clicked";
}

}
Now you can run and see the output. Let me explain how the execution flow will be take place when we run the zul file.
1. First it will create an instance for our class example5VM. Java
2. It will look for any method with annotation @Init, if method available, then it will execute that method. In our case, we have that method and also we are changing the variable m1 to some text. Since we already bind this variable for the label in the zul file, then it will update the UI at the initial stage itself.
3. Then onclick of first button, we have indicated to the binder such as to execute the method called hibtn1. And also, we have indicated to the binder, after executing this method, ZK binder has to update the UI for the label which is bind with the variable m1 by using @NotifyChange annotation. Same thing happens for other two buttons.
4. If you carefully look the code, for the method hibtn4 , we didn't notify the same. So on clicking fourth button, the label will not change.


Email ThisBlogThis!Share to XShare to Facebook
Posted in ZK MVVM | No comments
Newer Post Older Post Home

0 comments:

Post a Comment

Subscribe to: Post Comments (Atom)

Popular Posts

  • ZK Example for inline Editing with Add New and Delete
    I am quite impressed on this demo from ZK . But adding new record and delete existing record is missing as part of typical CRUD. So i thoug...
  • EDI 5010 Documentation 837 Professional - Loop 2010BB Payer Name
    2010BB Payer Name          In this loop, all the information will be taken from Insurance master screen. Take a look of our sample screen...
  • EDI 5010 Documentation–837 - BHT - Beginning of Hierarchical Transaction
    BHT – Beginning of Hierarchical Transaction Loop Seg ID Segment Name Format Length Ref# Req Value   BHT Beginning of Hier...
  • Hibernate Validator Example 2
    In this example, we will see some more validation constraints such as @email, @past, @length, etc. And also we will also define custom error...
  • ZK Passing Parameter between two files using MVVM–Part 1
    Overview This is the first series of articles about Passing parameter between two zul files using MVVM Design pattern .This article will fo...
  • MVVM Command annotation and Notify change example
    Here is an example, how to pass parameter on a zul through MVVM Command binding annotation. ZK URL http://books.zkoss.org/wiki/ZK%20Develo...
  • History of Present Illness
    HPI - One of the main component of Clinical History. What is an HPI ? The history of present illness (HPI) is a chronological description...
  • Patient Demographics
    Patient browse (search) is the key element for any EMR / PMS Software. In my past 15 years experience, i involved more than 5 times in desig...
  • ViewModel Class Java Annotation @Init, @NotifyChange, @Command
    In following sections we'll list all syntaxes that can be used in implementing a ViewModel and applying ZK bind annotation. The ZK binde...
  • Good Website Design Links
    Form Design Label Placement in Forms International Address Fields in Web Forms 40 Eye-Catching Registration Pages blog-comment-form-...

Categories

  • Billing Process
  • C Workbook
  • C++ Workbook
  • Eclipse Tips
  • EDI 5010
  • EMR Appointment Features
  • EMR Labs Stuff
  • EMR PMS Links
  • EMR Use cases
  • EMR Vital Sign
  • Good Website Design
  • Hibernate Criteria Queries
  • Hibernate Introduction
  • Hibernate Introduction Setup
  • Hibernate Mapping
  • Hibernate POC
  • Hibernate Validator
  • Hibernate–Java Environment setup
  • HPI
  • Java
  • Maven
  • MU Certification
  • NPI
  • PQRS
  • Practice Management System
  • Spring Security
  • Tech Links
  • Today Tech Stuff
  • zk
  • ZK Hibernate
  • ZK 5 Databinding
  • ZK Application
  • ZK Calling Another ZUL
  • ZK CheckBox
  • ZK CreateComponents
  • ZK CSS
  • ZK extended Components
  • ZK Foreach
  • ZK Forum Posts
  • ZK Framework
  • ZK Hibernate Setup
  • ZK ID Space
  • ZK Include
  • ZK Installation
  • ZK iReport
  • ZK Layout
  • ZK Listitem Pagination
  • ZK Message Box
  • ZK MVC
  • ZK MVC Combox Box
  • ZK MVC CRUD Examples
  • ZK MVC Listbox
  • ZK MVVM
  • ZK MVVM Combo
  • ZK MVVM CRUD
  • ZK MVVM ListBox
  • ZK Spring
  • ZK TextBox

Blog Archive

  • ►  2013 (105)
    • ►  December (3)
    • ►  September (7)
    • ►  August (13)
    • ►  July (1)
    • ►  June (11)
    • ►  May (3)
    • ►  April (14)
    • ►  March (19)
    • ►  February (21)
    • ►  January (13)
  • ▼  2012 (177)
    • ►  December (1)
    • ►  November (13)
    • ►  October (19)
    • ►  September (24)
    • ►  August (26)
    • ►  July (6)
    • ▼  June (37)
      • Combo Box– Show images for Items based on some con...
      • ZK Border Layout–Another example
      • MVVM–List Item–Hibernate–MySQL–Part 3
      • C Workbook
      • MVVM Modal window–Pass Parameter and Return values
      • C++ Workbook
      • ZK Border Layout–Menu on the left and content on t...
      • MVVM–List Item–Hibernate–MySQL–Part 2
      • Charge Entry Screen
      • Practice management System– PMS–Billing
      • Phone Box–Using j Query and Extending ZK Textbox
      • MVC Two combo Box – Fill second combo based on fir...
      • MVVM Two combo Box – Fill second combo based on fi...
      • MVVM–List Item–Hibernate–MySQL–Part 1
      • MVC Combo Box Data binding
      • MVVM Combo Box Data binding
      • List Item Double click event on selected Item usin...
      • MVVM Example for Form Validation
      • List Item on Select, show more details by using se...
      • List item Change background color for some particu...
      • List Item Double click event on selected Item
      • ViewModel Class Java Annotation @Init, @NotifyChan...
      • ZK MVVM CRUD - Part 3
      • ZK MVVM CRUD - Part 2
      • Select only few columns in Hibernate create query API
      • ZK MVVM CRUD - Part 1
      • Java List and ArrayList
      • Annotate non persistent properties with the @Trans...
      • MVVM Example 3–List item
      • Tab box with tool bar CSS
      • Change the location of the label in radio element
      • Hibernate 4.1.1 will create the column if we missp...
      • MVC–CRUD Application with ZK 5 Data Binding
      • Hibernate–Java Environment setup
      • How to refer CSS File in ZK Style tag
      • MVVM Examples–Example 2
      • MVVM Examples–Example 1
    • ►  May (30)
    • ►  April (16)
    • ►  March (1)
    • ►  January (4)
  • ►  2011 (5)
    • ►  December (1)
    • ►  November (1)
    • ►  July (1)
    • ►  June (1)
    • ►  April (1)
  • ►  2010 (1)
    • ►  September (1)
Powered by Blogger.

About Me

Unknown
View my complete profile