Как создать кнопку "редактировать" в JSF и переключаться между h:outputText и h:inputText

Как я могу создать кнопку "Изменить", чтобы при нажатии кнопки она меняла h:outputText в h:inputText?

1 ответ

Решение

Использовать rendered атрибут:

<h:outputText value="#{bean.entity.property}" rendered="#{not bean.editmode}" />
<h:inputText value="#{bean.entity.property}" rendered="#{bean.editmode}" />
...
<h:commandButton value="Edit" action="#{bean.edit}" rendered="#{not bean.editmode}" />
<h:commandButton value="Save" action="#{bean.save}" rendered="#{bean.editmode}" />

С этим в представлении определена фасоль:

private boolean editmode;

public void edit() {
    editmode = true;
}

public void save() {
    entityService.save(entity);
    editmode = false;
}

public boolean isEditmode() {
    return editmode;
}

// ...

Обратите внимание, что область видимости bean-компонента важна по причине, указанной в пункте 5 этого ответа: метод commandButton / commandLink / ajax action / listener не вызывается или входное значение не обновляется.


Кроме того, вы можете использовать disabled Атрибут входного компонента в сочетании с фрагментом CSS, который в основном делает его похожим на выходной компонент (удаляя границу).

<h:inputText value="#{bean.entity.property}" disabled="#{not bean.editmode}" />
...
<h:commandButton value="Edit" action="#{bean.edit}" rendered="#{not bean.editmode}" />
<h:commandButton value="Save" action="#{bean.save}" rendered="#{bean.editmode}" />

например

input[disabled] {
    border: 0;
}

Также здесь, боб должен быть виден в области видимости. Смотрите также Как правильно выбрать сферу применения бобов?

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