Quantcast
Channel: OmniFaces & JSF Fans
Viewing all articles
Browse latest Browse all 74

Generic client behavior example

$
0
0
Before checking this application, please get familiar with client behaviors. A simple example is available here.

Now, let's write a generic client behavior example. We simply want to display an image, and react via a JS snippet of code to the following events that occur on this image: onclick, onmouseout, onmouseover, onmousedown and onmouseup.

1.The index.xhtmllooks like this:

<h:body>
 <h:panelGrid columns="2">
  <h:graphicImage library="default" name="pfof.png">
   <b:genericBehavior/>
  </h:graphicImage>
  <div id="behaviorsId" style="width:300px;"/>
 </h:panelGrid>
</h:body>

2.We use a tag handler to programmatically register behaviors:

public class GenericBehaviorTagHandler extends TagHandler {

 private final GenericBehaviorHandler onmouseout = new GenericBehaviorHandler();
 private final GenericBehaviorHandler onmouseover = new GenericBehaviorHandler();
 private final GenericBehaviorHandler onclick = new GenericBehaviorHandler();
 private final GenericBehaviorHandler onmousedown = new GenericBehaviorHandler();
 private final GenericBehaviorHandler onmouseup = new GenericBehaviorHandler();

 public GenericBehaviorTagHandler(TagConfig tagConfig) {
  super(tagConfig);
 }

 @Override
 public void apply(FaceletContext ctx, UIComponent parent) throws IOException {

  if (parent instanceof ClientBehaviorHolder) {
      ClientBehaviorHolder clientBehaviorHolder = (ClientBehaviorHolder) parent;

      Map<String, List<ClientBehavior>> behaviors = clientBehaviorHolder.getClientBehaviors();

      if (!(behaviors.containsKey("mouseout"))
          && !(behaviors.containsKey("click"))
          && !(behaviors.containsKey("mouseover"))
          && !(behaviors.containsKey("mousedown"))
          && !(behaviors.containsKey("mouseup"))) {

           clientBehaviorHolder.addClientBehavior("mouseout", onmouseout);
           clientBehaviorHolder.addClientBehavior("mouseover", onmouseover);
           clientBehaviorHolder.addClientBehavior("click", onclick);
           clientBehaviorHolder.addClientBehavior("mousedown", onmousedown);
           clientBehaviorHolder.addClientBehavior("mouseup", onmouseup);
      }
   }
 }
}

3.The behaviors are instances of GenericBehaviorHandler:

public class GenericBehaviorHandler extends ClientBehaviorBase {

 @Override
 public String getRendererType() {          
  return "genericbehaviorrenderer";
 }
}

4.And the behavior renderer is:

@FacesBehaviorRenderer(rendererType = "genericbehaviorrenderer")
public class GenericBehaviorRenderer extends ClientBehaviorRenderer {

 @Override
 public String getScript(ClientBehaviorContext behaviorContext, ClientBehavior behavior) {
  return "document.getElementById('behaviorsId').innerHTML += '" + behaviorContext.getEventName() + " |';";
 }
}


The complete example is available here.

Viewing all articles
Browse latest Browse all 74

Trending Articles