I don't see anything obviously lwrong. Can you step through the code (or add
some debug output) to verify that the flag-setting code is actually being
called when you expect it to be?
On Dec 22, 2010, at 5:26 AM, Luiz Gustavo wrote:
> Hi Greg,
>
>
> These are the fragments involved:
>
>
> bxml
> ...
> <Form.Section>
>
> <TextInput Form.label="%lblDescricao"
> textSize="40" bxml:id="descricao"/>
>
> <BoxPane styles="{verticalAlignment:'center'}"
> Form.label="%lblValor">
> <TextInput textSize="10" bxml:id="valor" />
> <Checkbox buttonData="%lblConciliado"
> bxml:id="conciliado"
>
> ButtonPressListener.buttonPressed="conciliadoImg.setVisible(conciliado.isSelected());"/>
> <ImageView bxml:id="conciliadoImg"
> image="@conciliado.png" visible="false"/>
> </BoxPane>
>
> <CalendarButton bxml:id="data"
> Form.label="%lblData"/>
>
> <BoxPane Form.label="%lblTipo"
> orientation="horizontal" styles="{padding:4}">
>
> <bxml:define>
> <ButtonGroup bxml:id="tipos"/>
> </bxml:define>
> <RadioButton bxml:id="despesaButton"
> buttonGroup="$tipos" selected="true">
> <content:ButtonData icon="@despesa.png"
> text="%lblDespesa"/>
> </RadioButton>
> <RadioButton bxml:id="receitaButton"
> buttonGroup="$tipos">
> <content:ButtonData icon="@receita.png"
> text="%lblReceita"/>
> </RadioButton>
>
> </BoxPane>
>
> <ListButton bxml:id="categoria"
> Form.label="%lblCategoria" />
>
> <BoxPane Form.label="%lblObservacoes">
> <Border styles="{color:10}">
> <ScrollPane
> horizontalScrollBarPolicy="fill"
>
> verticalScrollBarPolicy="fill_to_capacity"
> preferredHeight="200"
> preferredWidth="500">
> <TextArea bxml:id="observacoes"/>
> </ScrollPane>
> </Border>
> </BoxPane>
>
> </Form.Section>
> ...
>
>
> Binding class:
>
> ...
> Action.getNamedActions().put("salvarAction", new Action() {
> @Override
> public void perform(Component source) {
> if (lancamento == null) {
> salvarNovo();
> }
> else {
> salvarEdicao();
> }
> atualizarGrid();
> }
> });
>
> ...
>
>
> private void salvarNovo() {
>
> try {
>
> Form.Flag flagDesc = null;
> Form.Flag flagVal = null;
> Form.Flag flagCat = null;
>
> String desc = descricao.getText().trim();
> String val = valor.getText().trim();
>
> if(desc == null || "".equals(desc.trim())){
> flagDesc = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(descricao, flagDesc);
>
> if(val == null || "".equals(val.trim())){
> flagVal = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(valor, flagVal);
>
> if(categoria == null){
> flagCat = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(categoria, flagCat);
>
> if(flagDesc != null || flagVal != null || flagCat != null){
> return;
> }
>
> lancamento = new Lancamento();
> lancamento.setDescricao(desc);
> lancamento.setConciliado(conciliado.isSelected());
> lancamento.setData(data.getSelectedDate().toCalendar().getTime());
> lancamento.setObservacao(observacoes.getText());
> lancamento.setValor(new BigDecimal(numberFormat.parse(val)
> .toString()));
> lancamento.setTipoLancamento((CategoriaLancamento) categoria
> .getSelectedItem());
>
> daoLancamento.cadastrar(lancamento);
> cancelar();
> Prompt.prompt(MessageType.INFO, resources.get("sucessoCadastro")
> .toString(), this);
> }
> catch (Exception e) {
> Prompt.prompt(MessageType.ERROR, resources.get("falhaCadastro")
> .toString(), this);
> }
>
> }
>
> private void salvarEdicao() {
>
> try {
>
> Form.Flag flagDesc = null;
> Form.Flag flagVal = null;
> Form.Flag flagCat = null;
>
> String desc = descricao.getText();
> String val = valor.getText();
>
> if(desc == null || "".equals(desc.trim())){
> flagDesc = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(descricao, flagDesc);
>
> if(val == null || "".equals(val.trim())){
> flagVal = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(valor, flagVal);
>
> if(categoria == null){
> flagCat = new Form.Flag(MessageType.ERROR,
> resources.get("campoRequerido").toString());
> }
> Form.setFlag(categoria, flagCat);
>
> if(flagDesc != null || flagVal != null || flagCat != null){
> return;
> }
>
> lancamento.setDescricao(desc);
> lancamento.setConciliado(conciliado.isSelected());
> lancamento.setData(data.getSelectedDate().toCalendar().getTime());
> lancamento.setObservacao(observacoes.getText());
> lancamento.setValor(new BigDecimal(numberFormat.parse(val)
> .toString()));
> lancamento.setTipoLancamento((CategoriaLancamento) categoria
> .getSelectedItem());
>
> daoLancamento.alterar(lancamento);
> cancelar();
> Prompt.prompt(MessageType.INFO,
> resources.get("sucessoEdicao").toString(), this);
> }
> catch (Exception e) {
> Prompt.prompt(MessageType.ERROR,
> resources.get("falhaEdicao").toString(),
> this);
> }
> }
>
>
> I can't see a reason for flags no work in this scenario. I have another frame
> that has just one field validated, and everything's right. Can you see
> something wrong?
>
>
> Thank's
>
> Luiz Gustavo S. de Souza
>
> http://luizgustavoss.wordpress.com
> http://luizgustavoss.blogspot.com
> http://twitter.com/lugustso
>
>
> 2010/12/22 Greg Brown <[email protected]>
> No, flags definitely don't appear one at a time - you should be able to flag
> all the fields in your form if you want to. The message won't appear until
> you hover over the field, but it should be outlined, and you should see the
> error icon.
>
> There must be some other issue - not sure what it might be.
>
>
> On Dec 21, 2010, at 10:14 PM, Luiz Gustavo wrote:
>
>> When the user enter some text in the field, it desapears, because flag is
>> set to null in the begining of the salvarEdicao method:
>>
>> Form.Flag flagDesc = null;
>>
>> ...
>>
>> if(desc == null || "".equals(desc.trim())){
>> flagDesc = new Form.Flag(MessageType.ERROR,
>> resources.get("campoRequerido").toString());
>> }
>> Form.setFlag(descricao, flagDesc);
>>
>>
>> So in the case of desc != null, I clean the flag. The problem is that the
>> flag for the second field (Valor) never apears. Initially i thought that
>> flags apeared one per time (not all at the same time), but even when the
>> first field is ok, the flag of the second doesn't apear.
>>
>> Any idea?
>>
>>
>>
>> 2010/12/22 Greg Brown <[email protected]>
>> If you want the flag to disappear when the user enters some text, you could
>> add a listener to the text input that clears the flag when the text changes.
>>
>> On Dec 21, 2010, at 10:02 PM, Luiz Gustavo wrote:
>>
>>> Hi Greg,
>>>
>>> I'm calling salvarEdicao when the user submit de form. I whant to validate
>>> the requeired fields befor inserting.
>>> I'll se the classes you told me, but in my scenario is there anything I can
>>> do?
>>>
>>>
>>>
>>> 2010/12/22 Greg Brown <[email protected]>
>>> When are you calling the salvarEdicao() method? If you want to validate as
>>> the user types, you'll need to call this method whenever the field value
>>> changes. For text, you may want to consider using a validator for this. See
>>> the classes in org.apache.pivot.wtk.validation and TextInput#setValidator().
>>>
>>>
>>> On Dec 21, 2010, at 9:37 PM, Luiz Gustavo wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm having problems using Form.flag.
>>>>
>>>>
>>>> I have a method for inserting data from a form, and a validation on the
>>>> begining:
>>>>
>>>>
>>>> private void salvarEdicao() {
>>>>
>>>> try {
>>>>
>>>> Form.Flag flagDesc = null;
>>>> Form.Flag flagVal = null;
>>>> Form.Flag flagCat = null;
>>>>
>>>> String desc = descricao.getText();
>>>> String val = valor.getText();
>>>>
>>>> if(desc == null || "".equals(desc.trim())){
>>>> flagDesc = new Form.Flag(MessageType.ERROR,
>>>> resources.get("campoRequerido").toString());
>>>> }
>>>> Form.setFlag(descricao, flagDesc);
>>>>
>>>> if(val == null || "".equals(val.trim())){
>>>> flagVal = new Form.Flag(MessageType.ERROR,
>>>> resources.get("campoRequerido").toString());
>>>> }
>>>> Form.setFlag(valor, flagVal);
>>>>
>>>> if(categoria == null){
>>>> flagCat = new Form.Flag(MessageType.ERROR,
>>>> resources.get("campoRequerido").toString());
>>>> }
>>>> Form.setFlag(categoria, flagCat);
>>>>
>>>> if(flagDesc != null || flagVal != null || flagCat != null){
>>>> return;
>>>> }
>>>>
>>>> ...
>>>> }
>>>>
>>>>
>>>> When I try to submit a form with desc and val (description and value)
>>>> empty, just one flag is presented. Even when I insert data in the
>>>> "Descrição" field, the flag in the field "Descrição" continues to apear.
>>>> The flag of field "Valor" doesn't apear in neigther cases.
>>>>
>>>>
>>>> Any idea?
>>>>
>>>> Cheers,
>>>> Luiz Gustavo S. de Souza
>>>>
>>>> http://luizgustavoss.wordpress.com
>>>> http://luizgustavoss.blogspot.com
>>>> http://twitter.com/lugustso
>>>> <frame1.png><frame2.png>
>>>
>>>
>>>
>>>
>>> --
>>> Luiz Gustavo S. de Souza
>>>
>>> http://luizgustavoss.wordpress.com
>>> http://luizgustavoss.blogspot.com
>>> http://twitter.com/lugustso
>>
>>
>>
>>
>> --
>> Luiz Gustavo S. de Souza
>>
>> http://luizgustavoss.wordpress.com
>> http://luizgustavoss.blogspot.com
>> http://twitter.com/lugustso
>
>
>
>
>