Hi !

So, I tried to use a checklist, and as you said, it worked ! For anyone
wanting the solution :

TestList.java :

public class TestList {
    @Inject
    private AlertManager alertManager;

    @Persist
    @Property
    private List<CheckText> list;

    @Persist
    @Property
    private List<ConsentText> selectedValues;

    @Property
    private CheckText currentText;

    @InjectComponent
    private Form form;

    @OnEvent(value = EventConstants.ACTIVATE)
    public void initOnActivate() {
        if (list == null) {
            list = new ArrayList<>();
            CheckText newtext;
            for (int i = 0; i < 5; i++) {
                newtext = new CheckText();
                newtext.setId(i);
                newtext.setText("Test n°" + i);
                newtext.setTicked(false);
                list.add(newtext);
            }
        }

        if(selectedValues == null) {
            selectedValues = new ArrayList<>();
        }
    }

    @OnEvent(value = EventConstants.SUCCESS)
    public void submit() {
        for (CheckText text : list) {
            if (!selectedValues.contains(text)) {
                form.recordError("Error on " + text.getText());
            }
        }

    }

    public Object onSuccessFromForm() {
        alertManager.alert(Duration.SINGLE, Severity.INFO, "Yee haa");
        return null;
    }

    public TextSelectModel getCheckTextModel() {
        return new TextSelectModel(list);
    }

    public ValueEncoder<CheckText> getCheckTextEncoder() {
        return new CheckTextEncoder(list);
    }
}

TestList.tml:

<t:alerts/>
<t:form t:id="form">
    <t:errors/>

    <t:checklist t:id="textsToCheck" encoder="textEncoder"
        model="checkTextModel" selected="selectedValues"/>
    <t:submit t:id="submitCheck"/>
</t:form>

CheckTextEncoder.java:

public class CheckTextEncoder implements ValueEncoder<CheckText>,
ValueEncoderFactory<CheckText> {

    private List<CheckText> texts;

    public CheckTextEncoder() {
        texts = new ArrayList<>();
    }

    public CheckTextEncoder(List<CheckText> texts) {
        this.texts = texts;
    }

    @Override
    public ValueEncoder<CheckText> create(Class<CheckText> type) {
        return this;
    }

    @Override
    public String toClient(CheckText value) {
        return value.getText();
    }

    @Override
    public CheckText toValue(String clientValue) {
        for (CheckText text : texts) {
            if (text.getText().equals(clientValue)) {
                return text;
            }
        }

        return null;
    }

}

CheckTextModel

public class TextSelectModel extends AbstractSelectModel implements
SelectModel {

    private List<CheckText> texts;

    public TextSelectModel(List<CheckText> texts) {
        this.texts = texts;
    }

    @Override
    public List<OptionGroupModel> getOptionGroups() {
        return null;
    }

    @Override
    public List<OptionModel> getOptions() {
        List<OptionModel> options = new ArrayList<>();

        for (CheckText text : texts) {
            options.add(new OptionModelImpl(text.getText(), text));
        }

        return options;
    }

}

--------------------

The checked texts are stored in "selectedValues", and then I can verify
which one is not in.

Regards,

Adrien


2013/10/2 Thiago H de Paula Figueiredo <thiag...@gmail.com>

> On Wed, 02 Oct 2013 04:32:36 -0300, Adrien Berthet <berthe...@gmail.com>
> wrote:
>
>   Oh sorry I didn't think of this page ! So there is three distinct
>> exceptions, all with the same message:
>>
>> Failure writing parameter 'value' of component TestList:textToCheck:
>> Property 'currentText' (within property expression 'currentText.ticked',
>> of
>> net.adrien.test.TestList@**27084440) is null.
>>
>
> This means that, during form submission, not rendering, textToCheck is
> null. Use the prepare event of Form to make sure textToCheck isn't null
> before the submission processing is done.
>
>
>  1 - org.apache.tapestry5.ioc.**internal.OperationException: happens at
>> the
>> beginning on the form, <t:form id="form">
>>
>> 2 - org.apache.tapestry5.runtime.**ComponentEventException: same location
>>
>> 3 - org.apache.tapestry5.ioc.**internal.util.**TapestryException:
>> happens at
>> the checkbox line, <t:checkbox t:id="textToCheck"
>> t:value="currentText.ticked" label="prop:currentText.text" />
>>
>
> It's actually all the same error in the same place. Tapestry shows
> something like a stack trace for template locations too.
>
>
>  Thank for all, Thiago !
>>
>
> ;)
>
>
> --
> Thiago H. de Paula Figueiredo
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@tapestry.**apache.org<users-unsubscr...@tapestry.apache.org>
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to