Я новичок в Java EE 8 и пытаюсь реализовать проект для работы со схемами базы данных. Теперь я добавляю перетаскивание атрибутов (div) между таблицами (div) на моей странице JSF, используя стандартный HTML5 API перетаскивания. Во-первых, метод атрибута вызывается из прослушивателя события удаления целевой таблицы:
const data = JSON.parse(e.dataTransfer.getData("text/plain"));
const attribute_block = document.getElementById(data.attribute_block_id);
attribute_block.change_relation(relation_block_id, relation_index);
Затем метод атрибута вызывает командный сценарий (f: commandScript)
attribute_block.change_relation = (relation_block_id, relation_index) =>
change_relation({relation_block_id: relation_block_id, relation_index: relation_index});
, который был передан во время компонента атрибута сборки. :
animateAttribute(
document.getElementById("${cc.clientId}:attribute-block"),
() => document.getElementById("${cc.clientId}:remove").click(), change_relation
)
Командный скрипт вызывает метод управляемого компонента и обновляет компонент родительской (предыдущей) таблицы:
<h:commandScript name="change_relation"
execute="${cc.parent.clientId}:relation-block"
render="${cc.parent.clientId}:relation-block"
action="${attributeController.changeRelation(cc.attrs.attribute)}">
</h:commandScript>
Метод управляемого объекта bean удаляет атрибут из предыдущего списка атрибутов сущности таблицы и добавляет его в новый :
Map<String, String> requestParameterMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String relationBlockId = requestParameterMap.get("relation_block_id");
int relationIndex = Integer.parseInt(requestParameterMap.get("relation_index"));
Relation newRelation = attribute.getRelation().getSchema().getRelations().get(relationIndex);
attribute.getRelation().removeAttribute(attribute);
newRelation.addAttribute(attribute);
для обновления нового компонента таблицы. Я добавляю его id для выполнения и рендеринга идентификаторов
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(relationBlockId);
FacesContext.getCurrentInstance().getPartialViewContext().getExecuteIds().add(relationBlockId);
, но компонент не сохраняет ввод пользователя для обновления таблицы, поскольку этап обновления модели уже пройден .
Вопрос : Могу ли я добавить новый компонент таблицы в список выполнения до этапа обновления модели или, может быть, я могу принудительно выполнить его?
PS , если я изменяю сигнатуру commandScript на
<h:commandScript name="change_relation"
execute="@form"
render="${cc.parent.clientId}:relation-block"
action="${attributeController.changeRelation(cc.attrs.attribute)}">
</h:commandScript>
перетаскивание работает правильно, но я хочу обновить только два компонента таблицы для минимизации выполняемых компонентов