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; }