#jsf #primefaces #uicomponents
Вопрос:
У меня есть стол, который выглядит так:
<h:panelGrid>
<p:dataTable id="datatableId" var="obj" value="#{myBean.dataList}" editable="true" editMode="cell" rowKey="#{obj.id}" rowIndexVar="rowindex">
<!-- some other columns -->
<p:column>
<p:cellEditor id="targetEditorId" disabled="#{myBean.disabled}">
<f:facet name="output">
<h:outputText value="#{obj.foo}"/>
</f:facet>
<f:facet name="input">
<p:inputNumber value="#{obj.foo}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:commandLink value="edit" process="@this" action="#{myBean.linkAction}" update="datatableId:#{rowindex}:targetEditorId">
</p:column>
</p:dataTable>
</h:panelGrid>
Логическое значение disabled отвечает за значение атрибута CellEditor «отключено».:
private boolean disabled;
@PostConstruct
public void init() {
setDisabled(true);
}
// getter
// setter
Действие командной ссылки:
public void linkAction() {
setDisabled(false);
}
Итак, проблема в том, что, когда я нажимаю на командную ссылку, я ожидаю, что ячейка будет доступна для редактирования, но этого не происходит. Однако, если я изначально установил атрибут disabled=»#{!MyBean.disabled}» — это работает (изначально ячейка доступна для редактирования. когда я нажимаю на ссылку — становится недоступным для редактирования), но задача требует обратного.
P.S. я знаю о <p:rowEditor> , но задача предполагает использование командной ссылки для редактирования ячеек
Комментарии:
1. @JasperdeVries Я согласен, но это не решает проблему
2. Если компонент инициализирован с
disabled="true"
помощью , он не будет присутствовать в дереве JSF, поэтому AJAX не сможет его обновить, см. coderanch.com/t/595646/java/… Если бы вы могли объяснить, почему вы должны использовать CommandLink, может быть, мы могли бы вам помочь?