Изменить атрибут действия формы для различных методов действий в Struts2

Я создал имя страницы JSP add.jsp для сохранения данных, подобных этому.

<s:form action="AddDomain">
            <s:push value="idp">
                <s:textfield name="domainName" label="Domain Name" />
                <s:textfield name="url" label="Domain URL" />
                <s:textfield name="noOfLicense" label="License Purchased" />
                <s:textfield name="licenseExpireDate" label="License Expire Date" title="YYYY-MM-DD like 2013-01-21" /> 
                <s:textfield name="userActiveDuration" label="Active User Duration"
                    title="please mention in days" />
                <s:textarea cols="30" rows="5" name="notes" label="Note"></s:textarea>
                <s:submit value="Add"></s:submit>
            </s:push>
        </s:form>

Метод действия, который показывает это представление, такой же, как

public String addDomainPage() {

    return ActionSupport.SUCCESS;
}

Я создал еще одну страницу, на которой перечислены все домены и предоставлена ​​ссылка для редактирования любого домена. При использовании нажмите на URL-адрес редактирования, это действие вызывается

public String loadDomain() {

    HttpServletRequest request = ServletActionContext.getRequest();
    String url = request.getParameter("durl");
    IDPBroker broker = new IDPBroker();
    idp = broker.getDomainByURL(url);
    return ActionSupport.SUCCESS;
}

При успешном завершении действия показываю add.jsp страницу. Struts заполняет данные на странице JSP.

Теперь проблема в том, что я хочу изменить значение атрибута действия тега формы. Я также хочу изменить value of submit button на «Изменить». Я планирую создать частный attribute(action,Label) в классе Action, и когда будет вызвано действие addDomainPage, я изменю значение этого атрибута в отношении добавления страницы. Аналогично для действия loadDomain. Теперь я не знаю, как это сделать, значит, как использовать эти частные атрибуты в поле зрения. Подскажите правильно ли я делаю и что делать дальше?


person Waqas Ali    schedule 18.12.2013    source источник


Ответы (1)


Один и тот же класс действий можно использовать для сопоставления различных методов с кнопками отправки. Нравится

<s:submit value="Add" method="addDomainPage" />
<s:submit value="Load" method="loadDomain" />

Атрибут действия формы должен сопоставляться с методом execute класса действия, который никогда не будет вызываться, если вы используете такие кнопки отправки. DMI, включенный по умолчанию, позволяет для вызова указанных методов.

Если вы хотите динамически изменять атрибуты в тегах Struts, вы можете использовать выражения OGNL в JSP вместо жестко заданных значений. Для этого вы должны определить свойства в действии, которые определяют динамические значения до того, как результат будет выполнен. Например

public String getAction(){
  return "AddDomain";
}  

<s:form action="%{action}">
person Roman C    schedule 18.12.2013
comment
Спасибо @Roman, это работа. У меня есть еще один вопрос. Я немного запутался с выражением %{} и ${}. Я просто хочу знать, какой из них я использую для какой цели. - person Waqas Ali; 18.12.2013
comment
%{} для выражений OGNL (не всегда требуется), ${} для выражений JSP EL (не используется в атрибутах тега struts). - person Roman C; 18.12.2013
comment
из вашего ответа я понимаю, что %{} используется, когда нам нужно значение свойства, которое определено в действии. Я прав? - person Waqas Ali; 18.12.2013
comment
Действие накладывается на top из valueStack, поэтому свойства доступны через OGNL. - person Roman C; 18.12.2013