Hi !

I have been happily hacking web sites with T5 for a year and half now and is
more then pleased!
Kudos to all of you for this excellent web framework that makes coding fun
again.

And I have never ever encountered any defect in the T5 code.

Now to my problem.

I just got an error in an onActivate method that looked like it could not
happen.

When steeping through it in my debugger I really get puzzled.

A variable assigned inside a block is null after leaving the block.

It must have something to do with the "plastering" of my code. Or !?

The error I get is ..

Caused by: java.lang.NullPointerException
       at
utskicket.pages.economy.EditYear._$advised$onActivate_13(EditYear.java:91)

... and in the debugger I can see that ledger is null at line 91.

In the code below I have commented what happens in the debugger.

Can anyone understand what could cause this error ...
I have stepped through the generated code without seeing anything strange.
It all looks great but when returning ledger is null.

Do I break any rule / convention with my code !?

Many many thanks in  advance,
Gunnar Eketrapp, Stockholm, Sweden

Environment:
*jdk 1.6.0_22*
*t5.2.6*
*windows 7 proffesional, 32-bit*


    @Property
    private Ledger ledger;

    @Property
    private String notice;

    //
------------------------------------------------------------------------------
    // -- Tapestry event methods - Tapestry event methods - Tapestry event
methods --
    //
------------------------------------------------------------------------------

    @Log
    Object onActivate(long groupId, long ledgerId) {

        group = groupDAO.findById(groupId);
        if (group == null)
            return Index.class;

        if (ledgerId != 0) {
            ledger = ledgerDAO.findById(ledgerId);
            if (ledger == null)
                return Index.class;
            if (!same(group.getId(), ledger.getGroup().getId()))
                return Index.class;

            hasPrevious = (null != ledgerDAO.findPrevious(ledger));
            hasNext = (null != ledgerDAO.findNext(ledger));
            transactionCount = transactionDAO.countTransactions(ledger);

        } else  {
            ledger = new Ledger(); * // 1: This one returns null !!!*
            Ledger lastLedger = ledgerDAO.findLast(group);
            if (null == lastLedger) {
                UTDate today = new UTDate();
                ledger.setStartDate(new UTDate(today.getYear(), 1, 1));  *//
2: This line ends the block!*
                ledger.setEndDate(new UTDate(today.getYear(), 12, 31));
            } else {
                ledger.setStartDate(lastLedger.getStartDate().warpYears(1));
                ledger.setEndDate(lastLedger.getEndDate().warpYears(1));
            }
        }

*        if (ledger.getClosed())  // 3: And here we crash!*
            notice = "Året är stängt och kan inte ändras";
        else {
            if (!mayEdit())
                notice = "Endast det senaste året kan ändras.";
            else if (!mayEditStarts())
                notice = "Startdagen kan inte ändras då det finns tidigare
år.";
        }

       return null;
    }

Reply via email to