I'm pretty sure that the encode is encoding the '%'. My situation is a list page with edit links to a detail form. The edit link with the position that has a key that contains the '%' worked. But followups from the detail form back to the list page didn't.
On further investigation, GotoEvent::processEvent is decoding the position. On the edit link, the position has not been decoded before the processEvent, so that works as is. But on a followup, the position coming from DbFormsTag has already been decoded before it is passed to the constructor of GotoEvent. So as a patch I encoded it in the constructor. Also had to encode the new position in InsertEvent after a new record is created. GotoEvent.java: /** * This constructor is not called by the controller but, actually, BY THE * VIEW for example if the FormTag "gotoPrefix" attribute is set an a * GotoEvent needs to be instanciated. * * @param table the input table * @param request request the request object * @param config the config object * @param position the position string */ public GotoEvent(Table table, HttpServletRequest request, DbFormsConfig config, String position) { super(table, request, config); this.position = table.getKeyPositionString(table.getFieldValues(position)); // CAPIO - encode the position string, cause processing it will decode it. try { this.position = Util.encode(this.position, getRequest().getCharacterEncoding()); } catch (UnsupportedEncodingException e) { logCat.error(e); } } And added into InsertEvent.java // Show the last record inserted String firstPosition = getTable().getPositionString(fieldValues); // CAPIO - must encode the position as it gets decoded when read. try { firstPosition = Util.encode(firstPosition, getRequest().getCharacterEncoding()); } catch (UnsupportedEncodingException ex) { logCat.error(ex); throw new SQLException(ex.getMessage()); } logCat.debug("pos-> " + firstPosition); getRequest().setAttribute("firstpos_" + getTable().getId(), firstPosition); I'm not sure where else in the code that there might be a mismatch between encoding/decoding, but other functions that we use work ok with these keys. Steve ---- Henner Kollmann <[EMAIL PROTECTED]> wrote: > > That's a real problem. Encoding of html strings uses the % sign as encoding > letter. > Could you try to change the Util.decode / Util.encode methods to change the > % to an double %%? > > Maybe this helps.... > > Thanks, > Henner > > > -----UrsprÃngliche Nachricht----- > > Von: Steven Law [mailto:[EMAIL PROTECTED] > > Gesendet: Freitag, 13. Mai 2005 09:06 > > An: jdbforms-interest > > Betreff: [dbforms] Position not encoded after update or insert > > > > I have a record that has a key with a value that ends with a > > percent character. When this record is updated I get a > > java.lang.StringIndexOutOfBoundsException when the list page > > tries to display the record because firstposition and > > lastposition have not been encoded. > > > > I can't find the code where these values are being set for > > the followup after the update event. Also happens if I insert > > a similar record. > > > > > > ------------------------------------------------------- > > This SF.Net email is sponsored by Oracle Space Sweepstakes > > Want to be the first software developer in space? > > Enter now for the Oracle Space Sweepstakes! > > http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click > > _______________________________________________ > > DbForms Mailing List > > > > http://www.wap-force.net/dbforms > > > > > ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_idt12&alloc_id344&op=click _______________________________________________ DbForms Mailing List http://www.wap-force.net/dbforms