Имеется сложный MasterDetailScreen для сущности Student следующей структуры данных:
Student @MtO-> Person <-@MtO PersonDocument. В панели информации/редактирования выводится список документов, принадлежащих персоне, на которую ссылается выбранный студент. Data-контейнеры организованы следующим образом:
<collection id="studentsDc"
class="com.example.intd.entity.student.Student">
<fetchPlan extends="_base">
<property name="person" fetchPlan="_base"/>
</fetchPlan>
<loader id="studentsDl">
<query>
<![CDATA[select e from IntD_Student e]]>
</query>
</loader>
</collection>
<instance id="studentDc"
class="com.example.intd.entity.student.Student">
<fetchPlan extends="_base">
<property name="person" fetchPlan="_base"/>
</fetchPlan>
<loader/>
<instance id="personDc" property="person">
<collection id="documentsDc" property="documents"/>
</instance>
</instance>
Дальше есть таблица с собственно документами:
<table id="documentsTable"
width="100%"
dataContainer="documentsDc">
<actions>
<action id="createDocument" type="create"/>
<action id="edit" type="edit"/>
<action id="remove" type="remove"/>
</actions>
<columns>
<column id="type"/>
<column id="number"/>
<column id="issueDate"/>
<column id="scan"/>
</columns>
<simplePagination/>
<buttonsPanel id="docsButtonsPanel"
alwaysVisible="true">
<button id="docCreateBtn" action="documentsTable.createDocument" caption="msg:///actions.Add" icon="ADD_ACTION"/>
<button id="docEditBtn" action="documentsTable.edit"/>
<button id="docRemoveBtn" action="documentsTable.remove"/>
</buttonsPanel>
</table>
У действия createDocument
есть кастомный хендлер, который программно вызывает редактор, т.к. создаваемой сущности необходимо присвоить правильную персону:
@Subscribe( "documentsTable.createDocument" )
public void onCreateDocument( Action.ActionPerformedEvent event ) {
//...
}
Хендлер работает правильно, все вроде бы здорово. НО. Если не выбран студент, почему-то кнопка docCreateBtn
остается активной! Со всеми вытекающими. Эксперимента для сгенерировал следующий enabledRule:
@Install( to = "documentsTable.createDocument", subject = "enabledRule" )
private boolean documentsTableCreateDocumentEnabledRule() {
return false; // отдаем false всегда, чтобы посмотреть на блокировку кнопки
}
Но даже при таком жестком вроде бы блокировании действия кнопка остается активной и действие выполняется… При этом “стандартные” действия редактирования и удаления блокируются корректно. Где я ошибся?