here is the template with the problematic actionlink highlighted

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd";
      xmlns:p="tapestry:parameter"  xmlns:tx="tapestry-library:tapx">
    <div class="diary">
    <t:zone t:id="diaryZone" id="diaryZone">
        <t:if test="!authenticated">
            <t:clientaccess vendorIdParm="${vendorId}"/>
            <p:else>
                <t:if t:test="denied">
                    <center>${message:text.diarydenied}</center>
                    <p:else>
                       <t:delegate to="block:booking"/>
                    </p:else>
                </t:if>
            </p:else>
        </t:if>
    </t:zone>

    <t:block id="booking">
        <center>
            <h1>${name}</h1>
        </center>
        <p>${message:text.diaryinstructions}</p>
        <t:zone t:id="dateZone" id="dateZone">
            <span class="left">${message:label.appointmentdate}</span><span 
style="color: red;">(${timeZoneName})</span>
            <div class="daybar">
                <a t:type="actionlink" t:id="bardayClickedLeft" 
t:zone="dateZone" t:parameters="parms" href="#" class="daybarnavl" 
title="${message:text.prevweek}"/>
                <t:loop t:source="bardays" t:value="startDate">
                    <a t:type="actionlink" t:id="bardayClicked" 
t:zone="dateZone" t:parameters="parms" t:context="startDate.time" href="#" 
class="${dateStyle}">
                        <span class="barDayName">${startDateDay}</span>
                        <br/>
                        <span class="barDayNum">${startDateNum}</span>
                        <br/>
                        <span class="barDayMon">${startDateMon}</span>
                    </a>
                </t:loop>
                <a t:type="actionlink" t:id="bardayClickedRight" 
t:zone="dateZone" t:parameters="parms" href="#" class="daybarnavr" 
title="${message:text.nextweek}"/>
            </div>
            <div class="timelist">
                <t:if t:test="startTimes">
                    <t:zone t:id="timeZone" id="timeZone">
                        <t:loop t:source="startTimes" t:value="startTime">
                            <a t:type="actionlink" t:id="timeClicked" 
t:zone="timeZone" t:parameters="parms" t:context="startTime.time" href="#" 
class="listtime">
                                <span class="startTime">${startTimeFmt}
                                    <t:if 
test="selectedTime">&nbsp;${entryDetails}</t:if>
                                </span>
                            </a>
                        </t:loop>
                    </t:zone>
                    <p:else>
                        <t:if t:test="!altDates">
                            ${message:text.pickadate}
                            <p:else>
                                ${message:text.anotherdate}:
                                <br/>
                                <t:loop t:source="altDates" t:value="startDate">
                                    <a t:type="actionlink" 
t:id="altDateClicked" t:zone="dateZone" t:parameters="parms" 
t:context="startDate.time" href="#" class="bardate">
                                        <span 
class="barDayName">${startDateDay}</span>
                                        <br/>
                                        <span 
class="barDayNum">${startDateNum}</span>
                                        <br/>
                                        <span 
class="barDayMon">${startDateMon}</span>
                                    </a>
                                </t:loop>
                            </p:else>
                        </t:if>
                    </p:else>
                </t:if>
            </div>
        </t:zone>
        <t:zone t:id="formZone" id="formZone">
        <form t:type="form" t:id="bookingForm" t:zone="^" t:context="parms">
            <t:if test="reqProposal">
                <br/>
                ${message:text.proposalinstructions}
                <p>
                <t:label for="proposal" 
class="left">${message:label.proposal}</t:label>
                <input t:type="TextArea" t:id="proposal" maxlength="2000" 
t:validate="required,minlength=100"
                       rows="5" cols="52" 
t:mixins="jquery/tooltip,jquery/zoneUpdater" t:zone="formZone" 
t:clientEvent="change" t:event="changeProposal" style="width:90%;"/>
                </p>
            </t:if>
            <t:if t:test="arranged">
                ${message:text.callininstructions}
                <p>
                <t:label for="callInTime" 
class="left">${message:label.callintime}</t:label>
                <t:select t:id="callInTime" value="callInTime" 
model="callInTimes" t:blankOption="NEVER"/>
                </p>
            </t:if>
            <t:errors/>
            <center>
                <input t:type="submit" value="${message:button.submit}" 
t:mixins="jquery/button"/>        
            </center>
        </form>
        </t:zone>
    </t:block>
    </div>
</html>

the debug log shows the parameters are passed from the browser, but do not get 
to the page class:

components.Diary REQ: reservationIdParm=4
components.Diary REQ: t:ac=admin
components.Diary REQ: t:zoneid=timeZone
components.Diary REQ: venueIdParm=1
components.Diary REQ: workIdParm=2
components.Diary preload:{venueIdParm=null, workIdParm=null, 
reservationIdParm=null}

public class Diary {

    @Parameter
    private Integer workIdParm;
    @Parameter
    private Integer venueIdParm;
    @Parameter
    private Integer reservationIdParm;
    @Property
    private HashMap parms;

    private void presetup() {
        bookingForm.clearErrors();
        parms = new HashMap();
        parms.put("workIdParm", workIdParm);
        parms.put("venueIdParm", venueIdParm);
        parms.put("reservationIdParm", reservationIdParm);
        for (String pname : request.getParameterNames()) {
            log.debug("REQ: " + pname + "=" + request.getParameter(pname));
        }
        log.debug("preload:" + parms);
    }

    void onActionFromTimeClicked(long timeClicked) {
        presetup();
        startTimex = new Date(timeClicked);
        startDatex = new Date((startTimex.getTime() / TimeConstants.MS_DAY) * 
TimeConstants.MS_DAY);
        log.debug("selected " + new Date(timeClicked) + " " + startDatex);
        loadTimes(15);
        loadCallInTimes();
        ajaxResponseRenderer.addRender(timeZone).addRender(formZone);
    }

The page class thows a NPE on subsequent use of the workIdParm.

I'd really like the @Paremeter members to be added to all the client side links 
by default, seems like boilerplate code to me.

  ----- Original Message ----- 
  From: Thiago H de Paula Figueiredo 
  To: Tapestry users 
  Sent: Thursday, December 05, 2013 1:36 PM
  Subject: Re: component paramter frustrations


  Without the code *and* template we cannot help you. We could only guess  
  what's happening.

  -- 
  Thiago H. de Paula Figueiredo
  Tapestry, Java and Hibernate consultant and developer
  http://machina.com.br
  Help me spend a whole month working on Tapestry bug fixes and  
  improvements: http://igg.me/at/t5month

  ---------------------------------------------------------------------
  To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
  For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to