Anton, I was just searching to find a similar mailing list post that came up a while ago, and realised that it was also by you, but I didn't end up sending my draft reply on Feb 1st. Sorry about that.
Anyway, this is something that I will also need in the near future, so I promise to get back to you as soon as I have looked at it. Chris On 6 March 2011 16:11, anton dos santos <[email protected]> wrote: > Hi > I am trying to use a TexInput with an IntValidator in a TableViewRowEditor > but I can't get it to do what I want. I'd like to have an input field where > user can enter only digits and the input field can be empty (in that case > background can become red if input is mandatory or stay white). > > When I set StrictValidation="true", then it is impossible to have an empty > InputField; user can't do following : erase current value in input and enter > a new value. User has to enter the new value and then remove the old, which > is not intuitive (at least to me). > > Then I tried StrictValidation="false"; it seems to work, but user can also > enter characters (which is not what I want) and when he hits return key to > end editing, an exception is thrown: > java.lang.NumberFormatException: For input string: "145jhk" > at > java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) > at java.lang.Long.parseLong(Long.java:419) > at java.lang.Long.parseLong(Long.java:468) > at org.apache.pivot.beans.BeanAdapter.coerce(BeanAdapter.java:897) > at org.apache.pivot.beans.BeanAdapter.put(BeanAdapter.java:286) > at org.apache.pivot.json.JSON.put(JSON.java:152) > at org.apache.pivot.wtk.TextInput.store(TextInput.java:841) > at org.apache.pivot.wtk.Container.store(Container.java:613) > at > org.apache.pivot.wtk.content.TableViewRowEditor.endEdit(TableViewRowEditor.java:254) > Here, maybe TextInput#store() shoudn't be invoked when > TextInput#isTextValid() == false ? > > I also tried StrictValidation="true" and an intValidator that accepts empty > input by overriding isValid(): > public boolean isValid(String text) { > final ParsePosition pos = new ParsePosition(0); > Object obj = format.parseObject(text, pos); > if( obj == null || text.length() == 0) { > return true; > } > > // the text is only valid is we successfully parsed ALL of it. Don't > want trailing bits of > // not-valid text. > return obj != null && pos.getErrorIndex() == -1 && pos.getIndex() == > text.length(); > } > this works fine until user erases everything in the TextInput, from then on > use can enter any character, he is no longer limited to digits. > > What else could I try ? > > Regards > Anton >
