I was semi able to get it to work using the following code, but it looks as if the onDocument method doesn't have a blur event handler?
(function() { define(["t5/core/events", "t5/core/dom", "t5/core/zone", "./jquery"], function(events, dom, zone, $) { int = function(spec) { var $field = $("#" + spec.id); $field.attr("data-update-zone", spec.zone); $field.attr("data-update-url", spec.url); return dom.onDocument('click', 'input[data-update-zone]', function() { var containingZone; containingZone = zone.findZone(this); return containingZone && containingZone.trigger(events.zone.refresh, { url: this.attribute("data-update-url"), parameters: { "t:fieldvalue": $field.val() } }); }); }; return int; }); }).call(this); On Thu, Oct 31, 2013 at 2:36 PM, George Christman <gchrist...@cardaddy.com>wrote: > I'm trying to create a mixin that on blur will grab the field value and > pass it to an event handler followed by a zone refresh. I continue to get a > null pointer on the zone refresh, I'm not sure what I'm missing. > > > tml. > > <t:textfield t:id="employeeName" value="accrualBalance.employeeTemp" > t:mixins="fieldUpdate" t:zone="empIdZone" updateFieldId="empId"/> > > mixins > > @Events( > {EventConstants.VALIDATE, "fieldUpdated" + " when 'zone' parameter > is bound"}) > public class FieldUpdate { > > static final String EVENT_NAME = "fieldupdate"; > @Environmental > private JavaScriptSupport jsSupport; > @InjectContainer > private ClientElement element; > @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) > private String updateFieldId; > @Inject > private ComponentResources resources; > @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) > private String zone; > > public void afterRender() { > Link link = resources.createEventLink(EVENT_NAME); > > JSONObject param = new JSONObject(); > param.put("id", element.getClientId()); > param.put("updateFieldId", updateFieldId); > param.put("url", link.toString()); > param.put("zone", zone); > > jsSupport.require("fieldupdate").with(param); > } > > Object onFieldUpdate(@RequestParameter(value = "t:fieldvalue", > allowBlank = true) final String fieldvalue) throws ValidationException { > > CaptureResultCallback<Object> callback = new > CaptureResultCallback<>(); > > this.resources.triggerEvent("fieldUpdated", new > Object[]{fieldvalue}, callback); > > return callback.getResult(); > } > } > > > .js > > (function() { > define(["t5/core/ajax", "./jquery"], function(ajax, $) { > int = function(spec) { > var $field = $("#" + spec.id); > > return $field.bind('blur', function() { > return ajax(spec.url, { > type: "POST", > data: { > "t:fieldvalue": $field.val() > }, > contentType: "application/x-www-form-urlencoded", > success: function(response) { > return process(response); > } > }); > }); > }; > return int; > }); > }).call(this); > > .java > > @InjectComponenet > private Zone empIdZone; > > @Inject > private AjaxResponseRenderer ajaxResponseRenderer; > > void onFieldUpdated(String value) { > test = "test"; > ajaxResponseRenderer.addRender(empIdZone); > } > > > exception > > > org.apache.tapestry5.ioc.internal.OperationException trace > > - Handling Ajax 'fieldupdate' component event request for > timerecords/AccrualBalance:employeename. > > java.lang.NullPointerException > Filter Frames? > Stack trace: > > - org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:929) > - org.apache.tapestry5.json.JSONArray.print(JSONArray.java:464) > - org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:901) > - org.apache.tapestry5.json.JSONArray.print(JSONArray.java:464) > - org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:901) > - org.apache.tapestry5.json.JSONObject.print(JSONObject.java:872) > - org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:895) > - org.apache.tapestry5.json.JSONObject.print(JSONObject.java:872) > - org.apache.tapestry5.json.JSONCollection.print(JSONCollection.java:95) > > - > org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl.renderPartialPageMarkup(AjaxPartialResponseRendererImpl.java:93) > > - > org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl.renderPartialPageMarkup(AjaxPartialResponseRendererImpl.java:104) > > - > org.apache.tapestry5.internal.services.AjaxComponentEventRequestHandler.handle(AjaxComponentEventRequestHandler.java:128) > > - > org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter.handle(AjaxFormUpdateFilter.java:56) > > - > org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42) > > > > -- > George Christman > www.CarDaddy.com > P.O. Box 735 > Johnstown, New York > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York