Как создать кнопку «редактировать» в JSF и переключаться между h: outputText и h: inputText - PullRequest
2 голосов
/ 20 августа 2011

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

1 Ответ

4 голосов
/ 24 августа 2011

Используйте атрибут 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}" />

При этом в bean-объекте области видимости:

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 действие / метод слушателя не вызывается или входное значение не обновляется .


В качестве альтернативы вы можете использовать атрибут 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;
}

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

...