Struts2 отключить <s: textfield>, используя некоторое выражение - PullRequest
3 голосов
/ 19 октября 2011

В моем приложении две роли: ROLE_ADMIN и ROLE_USER Также у меня есть форма с некоторыми полями. Я хотел бы иметь следующее: Когда пользователь имеет роль ADMIN, он может редактировать определенную группу полей, а когда пользователь имеет роль USER, он не может редактировать эти поля. Я не хочу иметь две разные формы или две копии полей для каждой роли.

Я пытался сделать что-то подобное:

disabled = "$ {myFlag}" >, где myFlag оценивается по ролям.

Но у меня предупреждение "отключен" не поддерживает выражения времени выполнения.

Есть ли способ сделать это? Или, может быть, есть лучший способ, например, заменить сгенерированный ввод на метку?

Заранее спасибо.

Ответы [ 2 ]

11 голосов
/ 19 октября 2011

Вы должны использовать выражение OGNL by %{expression} в теге Struts2 .

<s:textfield disabled="%{myFlag}" />

как мне установитьтакая переменная на странице?

Не работает с %{myFlag}?Или вы можете установить переменную с помощью

<s:set var="flag">${myFlag}</s:set>

Реализация:

<s:textfield disabled="#flag" />
0 голосов
/ 19 октября 2011

Добавьте cssClass атрибут к этим полям и напишите функцию javascript, которая должна вызываться в теле onload event

function calledonbodyload() {
 <s:if test="%{role=='ROLE_USER'}">
   document.getElementsByClass("yourClass").disabled=true;
 </s:if>
}

Я не уверен насчет getElementByClass() в простом javascript, но jQuery's $(".yourClass").attr('disabled',true); отлично работает

...