Based on the example from Hugo Palma (see 
http://markmail.org/message/4bdwo2yrx6tavdgh)
I implemented a dependend checkbox.

Event handling is fine, but I lost hours finding out while response.evalJSON() fails and I still have no clue...

Im always getting this erreor;
Error communication with the server: Result of expression 'response.evalJSON' [undefined] is not a function.

Looks like evalJSON ist not defined (I'm not a JavaScript guy at all....)

How do I import the js library that includes the evalJSON function? I tried everithing I can think of and this is my
current js import

@IncludeJavaScriptLibrary( { "context:js/Chenillekit.js", "context:js/ RESelection.js", "${tapestry.scriptaculous}/prototype.js" })
public class RealEstateCreate {

Any help is VERY welcome, as I'm at a dead end now....


Thanks, Max


This are the js, tml and class files

---------- RESelection.js ---------

function onCompleteChangeReSubType(response) {
    selectElement = $('resubtype');
    Tapestry.debug(response);
    Tapestry.debug("1");
    responseJSON = response.evalJSON();
    Tapestry.debug("2");

    while (selectElement.options.length > 0) {
        selectElement.options[0] = null;
    }

    for (index = 0; index < responseJSON.length; index++) {
        selectElement.options[index] = new Option(responseJSON
                        [index].label, responseJSON [index].value);
    }

    Tapestry.ElementEffect.highlight($("resubtype"));
}


----class---





----- tml RealEstateCreate.tml ----

<html t:type="layout" title="message:pagename" sidebarTitle="message:sidebarTitle "
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
      xmlns:p="tapestry:parameter">

        <t:form t:id="form" class="yform">

            <t:errors/>

                <div class="type-text">
                        <t:label for="title"/>
<t:textfield t:id="title" value="realestate.title" validate="required"/>
        </div>

        <t:label for="retype"/>
                <select t:type="select" t:id="retype" value="realestate.retype"
model="reTypesSelectionModel" encoder="reTypesValueEncoder" validate="required"/>

                <t:label for="resubtype"/>
                <select t:type="select" t:id="resubtype" 
value="realestate.resubtype"
model="reSubTypesSelectionModel" encoder="reSubTypesValueEncoder" validate="required"/>

        <t:ybeaneditor t:id="realestate" exclude="title">
                <p:description>
                <t:label for="description"/>
<t:textarea t:id="description" value="realestate.description"/>
            </p:description>
        </t:ybeaneditor>
        
        <div class="type-button">
            <input type="submit" value="Anlegen"/>
        </div>
        
        </t:form>
        
        <t:if test="message">
                <div class="info">
                        ${message}
                </div>
        </t:if>
        
        <p:sidebar>
                <div class="menue-box">
                        <t:agentmenu/>
                </div>
        </p:sidebar>

</html>


-------- class  RealEstateCreate.java ----------


package net.weissboeck.gimmo.pages.realestate;

import java.util.List;

import net.weissboeck.gimmo.annotations.InjectSelectionModel;
import net.weissboeck.gimmo.beans.WebUser;
import net.weissboeck.gimmo.entities.Agent;
import net.weissboeck.gimmo.entities.RESubType;
import net.weissboeck.gimmo.entities.REType;
import net.weissboeck.gimmo.entities.RealEstate;
import net.weissboeck.gimmo.services.DataService;
import net.weissboeck.gimmo.services.RealEstateService;
import net.weissboeck.gimmo.services.UserService;
import net.weissboeck.gimmo.util.ExceptionParser;

import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Mixins;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Select;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.json.JSONObject;
import org.chenillekit.access.annotations.Restricted;
import org.slf4j.Logger;


@Restricted(groups = { "AGENT" })
@IncludeJavaScriptLibrary( { "context:js/Chenillekit.js", "context:js/ RESelection.js", "${tapestry.scriptaculous}/prototype.js" })
public class RealEstateCreate {

    @Inject
    private Logger logger;

    @SessionState
    private WebUser webUser;

    @Component
    private Form form;

    @Persist
    @Property
    private RealEstate realEstate;

    @SuppressWarnings("unused")
        @Property
    @Persist(PersistenceConstants.FLASH)
    private String message;

    @InjectPage
    private RealEstateEdit editPage;

    @Inject
    private RealEstateService realEstateService;

    @Inject
    private DataService dataService;

    @Inject
    private UserService userService;

    @InjectSelectionModel(labelField = "name", idField = "oid")
    private List<REType> reTypes;

    @InjectSelectionModel(labelField = "name", idField = "oid")
    private List<RESubType> reSubTypes;

@Component(parameters = {"event=change", "onCompleteCallback=literal:onCompleteChangeReSubType"})
    @Mixins({"ck/OnEvent"})
    private Select reType;



    @Log
    @OnEvent(component="reType", value="change")
    public JSONArray onChangeRETypeEvent(String value) {
        JSONArray jsonArray = new JSONArray();

List<RESubType> subTypes = dataService .getRESubTypes(dataService.loadREType(Long.parseLong(value)));

        for (RESubType subType : subTypes) {
            JSONObject jo = new JSONObject();
            jo.put("value", subType.getOid());
            jo.put("label", subType.getName());
            jsonArray.put(jo);
        }

        return jsonArray;
    }

    @Log
    void onPrepare() {
        reTypes = dataService.getRETypes();
        reSubTypes = dataService.getRESubTypes(reTypes.get(0));
    }


    @Log
    Object onSuccess() {
        realEstate.setIsActive(true);
        realEstate.setAgent(userService.loadAgent(webUser.getOid()));
        realEstateService.updateGeoData(realEstate);
        realEstateService.save(realEstate);
        editPage.onActivate(realEstate.getOid());
        return editPage;
    }

    @Log
    Object onException(Throwable cause) {
        form.recordError(ExceptionParser.extractMessage(cause));
        return this;
    }


    @Log
    void onActivate(Long pOid) {
        Agent agent = userService.loadAgent(webUser.getOid());
        if (pOid == null || pOid == 0) {
                realEstate = new RealEstate();
        }
        realEstate.setContactEmail(agent.getContactEmail());
realEstate.setContactName(agent.getFirstname() + " " + agent.getLastname());
        realEstate.setContactPhone(agent.getPhone());
        realEstate.setContactSalutation(agent.getSalutation());
    }
}




Reply via email to