Ошибка чтения параметра 'selected' компонента tynamo/PropertyEditBlocks:palette_set

Я испытываю модуль модели Tynamo (org.tynamo:tapestry-model-web:0.3.1:jar) поверх Tapestry, и я столкнулся с проблемой, с которой я не могу справиться.

У меня есть две сущности Клиент и Контракт. Очевидно, что у клиента много контрактов:

контракт

@Entity
@BeanModels({ @BeanModel(reorder = "id") })
public class Contract {

    [...]

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="contract_id")
    public Long getId() {
        return id;
    }

    /**
     * @return the client
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "client_id", nullable = true)
    public Client getClient() {
        return client;
    }

клиент

@Entity
@BeanModels({ @BeanModel(reorder = "id") })
public class Client{

    [...]

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "client_id")
    public Long getId() {
        return id;
    }

    /**
     * @return the contracts
     */
    @OneToMany(cascade = { CascadeType.ALL })
    public List<Contract> getContracts() {
        return contracts;
    }

Все в порядке, когда я пытаюсь создать нового клиента, если я исключаю контракт с

@BeanModels({ @BeanModel(exclude = "contrats") })

Но если я пытаюсь добавить один без исключения контрактов, я получаю следующее исключение:

ERROR] pages.Add Render queue error in SetupRender[tynamo/PropertyEditBlocks:palette_set]: Failure reading parameter 'selected' of component tynamo/PropertyEditBlocks:palette_set: org.apache.tapestry5.ioc.internal.util.TapestryException
org.apache.tapestry5.ioc.internal.util.TapestryException: Failure reading parameter 'selected' of component tynamo/PropertyEditBlocks:palette_set: org.apache.tapestry5.ioc.internal.util.TapestryException [at classpath:org/tynamo/pages/PropertyEditBlocks.tml, line 39]
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:153)
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.render(ComponentPageElementImpl.java:181)
    at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
    at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124)
    at $PageRenderQueue_419b37801cb0d.render(Unknown Source)
    at $PageRenderQueue_419b37801cb0c.render(Unknown Source)

Из моего понимания компонента Палитра это означает, что выбранные по умолчанию значения, которые должны присутствовать... нет! Что точно, потому что нет значения по умолчанию!

Если я добавлю клиента непосредственно в базу данных (MySQL) и не исключу это поле из моей сущности, я смогу без проблем показать и отредактировать его, но при добавлении нового возникнет проблема.

Что я пропустил?

1 ответ

Решение

Просто убедитесь, что ваш список контрактов всегда имеет ненулевое значение.

@Entity
@BeanModels({ @BeanModel(reorder = "id") })
public class Client{

    private List<Contract> contracts = new ArrayList<Contract>();

    @OneToMany(cascade = { CascadeType.ALL })
    public List<Contract> getContracts() {
        return contracts;
    }

[...]

}

Кстати, осторожнее с двусторонними отношениями между клиентом и контрактом. В этом случае я думаю, что вы пытаетесь отобразить две стороны одного и того же отношения, но вместо этого вы отображаете два разных отношения. Двунаправленные отношения всегда сложно, но это другой вопрос.

Другие вопросы по тегам