Использовать if/else в текстовом поле?

Я уже нашел несколько способов использования тегов if/else, а также как использовать его в теге <tr>.

Но можно ли использовать его внутри тега <s:textfield>?

Я хочу отключить несколько полей (текстовые поля и средство выбора даты), если определенный параметр верен. На данный момент у меня есть весь код дважды. Один раз с disable="true" и один раз без. Это делает jsp чрезвычайно многословным.

Я был бы очень рад, если бы был лучший/более короткий путь.


person SomethingChocolate    schedule 17.11.2014    source источник
comment
Что вам нужно, чтобы скрыть их, чтобы не помещать их на страницу, что?   -  person Andrea Ligios    schedule 17.11.2014
comment
Я хочу отключить поля, если выполняется определенное условие, чтобы сделать дальнейшее редактирование невозможным.   -  person SomethingChocolate    schedule 17.11.2014


Ответы (2)


Попробуйте использовать это выражение внутри <s:textfield>

disabled="%{myCondition}"

где myCondition должно оцениваться как true или false.

person Predrag Maric    schedule 17.11.2014
comment
Большое спасибо, это было именно то, что я искал! В моем случае у меня есть объект, который на самом деле TRUEили FALSE. Теоретически возможно также иметь другое утверждение в качестве условия? говоря disable=%{varialbe==0}"? Это тоже сработает? - person SomethingChocolate; 17.11.2014

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

Например, вы можете

  1. установите переменную и используйте ее в своих текстовых полях:

    <s:set var="disabled" value="%{condition}"/>
    <s:textfield ... disabled="%{#disabled}" />
    
  2. используйте метод действия, который возвращает логическое значение, как в ответе @PredragMaric:

    public boolean getConditionFromAction(){
        return (foo!=bar);
    }
    
    <s:textfield ... disabled="%{conditionFromAction}" />
    
  3. создайте два фрагмента JSP и включите их (излишняя польза в случае просто отключения, но полезная в других случаях, например, отображение совершенно другого набора полей)

    <s:if test="%{condition}">
        <s:include page="snippetA.jsp" />
    </s:if>
    <s:else>
        <s:include page="snippetB.jsp" />
    </s:else>
    

    (в этом случае не забудьте поставить

    <%@ taglib prefix="s" uri="/struts-tags" %>
    

    во фрагментах тоже).

  4. отключив их с помощью javascript при загрузке страницы (пример с jQuery):

    <script>
        $(function(){
            <s:if test="%{condition}">
                $("input[type='text']").attr('disabled','disabled');
            </s:if>
            <s:else>
                $("input[type='text']").removeAttr('disabled');
            </s:else>
        });
    </script>
    

    (лучше использовать селектор класса).

Относительно вашего последнего комментария:

Я хочу отключить поля, если выполняется определенное условие, чтобы сделать дальнейшее редактирование невозможным.

помните, что вы ДОЛЖНЫ выполнять серверную часть управления, потому что каждый пользователь может изменить HTML / DOM (с помощью Firebug или FF DevTools, Chrome DevTools и т. д.) или просто создать запрос ad-hoc, даже не посещая вашу страницу, и активировав поля, которые вы отключили.

Проверка на стороне клиента удобна для пользователя и ценится как первый фильтр, проверка на стороне сервера является обязательной.

person Andrea Ligios    schedule 17.11.2014