Почему редактор p:Cell не обновляется правильно?

#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, может быть, мы могли бы вам помочь?