Получение значения поля ввода JSF без управляемого свойства bean

Я хотел бы получить значение поля ввода JSF в управляемом методе действия bean, не связывая его с каким-либо управляемым свойством bean. Например.

Моим вариантом использования является то, что в моем приложении я хотел бы запрашивать у пользователя здесь и там для паролей для каждой операции DML и, следовательно, хотел бы иметь поля с паролем и комментариями в каждом из моих пользовательских интерфейсов, а замечания должны быть сохранен в общей таблице для целей аудита.

Как я могу это достичь?

2 ответа

Просто делайте то же самое, что и JSF делает под обложками: захват параметра HTTP-запроса. Если вы знакомы с базовым HTML, вы знаете, что каждый элемент ввода HTML отправляет свою пару name=value в качестве параметра HTTP-запроса.

Учитывая

<h:form id="formId">
 <p:inputtext id="userId"> <!-- Note: no value attribute at all, also no empty string! -->
 ...
 </p:inputtext></h:form>

который генерирует в основном следующий HTML

<form id="formId" name="formId">
 
 ...
 <button type="submit" ...="">submit</button>
</form>

вы могли бы взять его как следует из ExternalContext#getRequestParameterMap():

public void submit() {
 ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
 String userId = ec.getRequestParameterMap().get("formId:userId");
 // ...
}

Не забудьте вручную конвертировать и проверять его, если это необходимо, например, как JSF делает под обложками. Другими словами, просто повторите задание JSF, написав дополнительный код, чтобы ваш код не был DRY:)


Если свойство remark не зависит от каких-либо сущностей, оно будет зависеть только как свойство, от управляемого- bean sessionScoped или requestScoped в соответствии с вашими потребностями, к тому, что вы хотите. Если вы хотите, чтобы это свойство было независимым от любого Java- Beans, поэтому вы можете использовать attirbute binding тега inputText.

Чтобы сделать это, см. здесь в хорошем ответе M. @BalusC: Как работает атрибут привязки в JSF? Когда и как его использовать?

И посмотрите также: Причины использования привязки в форме JSF

licensed under cc by-sa 3.0 with attribution.