Struts2 - Могу ли я сделать это или это ограничение рамки? - PullRequest
0 голосов
/ 10 декабря 2010

То, что я хотел бы сделать это легко:

У меня есть меню, которое загружается с учетом значений некоторых переменных. Позвольте мне показать нам код:

<s:div cssClass="menu_table" id="loginContent">
    <c:choose>
        <c:when test="${not action.loggedOn}">
            <s:form action="checkLogin" theme="simple">
                <span id="err" class="menu_err">
                    <s:property value="error" />
                </span>
                <s:textfield name="nickname" />
                <s:password name="password" />
                <span class="menu_span">
                    <sj:submit targets="loginContent" value="Login" />
                </span>
            </s:form>
        </c:when>
        <c:when test="${action.loggedOn}">
            <s:form action="checkLogout" theme="simple">
                <s:label cssClass="menu_title" value="Ciao #{nickname}" />
                <span class="menu_span">
                    <sj:submit targets="loginContent" value="Logout" />
                </span>
            </s:form>
         </c:when>
    </c:choose>
</s:div>

Поведение очень простое: если action.loggedOn имеет значение true, я загружаю часть кода, а еще одну.

Теперь, когда я загружаю один или другой, я могу сделать AJAX-вызов (используя поддержку JQuery) серверу, который изменяет значение переменной ошибки (является строкой) и значение loggedOn (который является логическим).

Что я хотел бы знать (используя эту платформу): возможно ли выполнить непосредственно эту часть кода на сервере и перезагрузить ее на клиенте? (Я имею в виду меньше слов: возможно ли выполнить серверную часть страницы jsp (как для стандартного запроса, но на этот раз с ajax) и передать клиенту только небольшую часть кода)

Или (как мне кажется) мне нужно создать клиентскую функцию и перекрасить мои div-ы (например, с помощью переменных JSON или других функций Jquery) из-за строкового результата после вызова ajax?

Используя JSF и другие фреймворки, возможен первый вариант. Могу ли я сделать это с помощью Struts? Надеюсь, мой вопрос ясен:)

Просто курьезы.

Спасибо

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Я думаю, что самым чистым способом было бы создать новый метод в контроллере, который просто возвращает jsp только части меню (как показано в вопросе). Вы можете сделать вызов ajax, а затем загрузить в контейнер вашего меню новый jsp:

$.ajax({ 
    url: 'yourUrl',  
    success: function(html){ 
        $('#menuContainer').html(html); }, 
    error: function() { 
        alert('There was an error!'); } 
    });

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

Редактировать: Как отправить JSON или HTML в том же методе контроллера

<action name="HelloWorld" class="vaannila.HelloWorld">
    <result name="sendJson" type="json"/>
    <result name="sendHTML">/url/yourjsp.jsp</result>
</action>

и в ваших действиях что-то вроде этого

public String execute(){
    if(json){
        return "sendJson";
    }
    if(html){
        return "sendHTML";
    }
}
1 голос
/ 10 декабря 2010

Насколько мне известно, то, что вы спрашиваете, невозможно, вы должны выбрать вариант перекраски, который вы предложили в своем посте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...