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.OperationExceptiontrace

   - 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

Reply via email to