Библиотека Struts2 + Jquery - Что не так в этом вызове AJAX? - PullRequest
0 голосов
/ 06 декабря 2010

Я пытаюсь вызвать Ajax с Struts2 и библиотекой JQuery.Это код jsp:

<s:div id="my_result" >
    Nothing
</s:div>

<s:form action="UserManager" theme="simple">
    <s:textfield name="nickname" />
    <s:password name="password" />
    <s:label cssClass="menu_span">
        <sj:submit targets="my_result" value="Login" />
    </s:label>
</s:form>

Это код компонента / действия с xml:

public class UserManager extends ActionSupport {
    private String nickname;
    private String password;

    @Override
    public String execute() throws Exception {
        String output="i have insered "+this.getNickname()+" and "+this.getPassword();
        System.out.println(output);
        return output;
    }

    public String getNickname() { return nickname; }
    public void setNickname(String newValue) { nickname=newValue; }

    public String getPassword() { return password; }
    public void setPassword(String newValue) { password=newValue; }
}

<package name="model" extends="struts-default">
    <action name="UserManager" class="model.UserManager">
        <result>index.jsp</result>
    </action>
</package>

Если i return SUCCESS в компоненте UserManager, этозагрузить на my_result ту же страницу вызова.Иначе, если я return output получу Messages:<br> No result defined for action model.UserManager and result i have insered aaa and bbb сообщение (с ником = aaa и паролем = bbb).

Что случилось?Как я могу вернуть эту строку?Я думаю, что это ошибка struts.xml

Cheers

ОБНОВЛЕНИЕ

открытый класс UserManager extends ActionSupport {private String nickname;приватный строковый пароль;ошибка частной строки;

@Override
public String execute() throws Exception {
    error="i have insered "+this.getNickname()+" and "+this.getPassword();
    return SUCCESS;
}

public String getNickname() { return nickname; }
public void setNickname(String newValue) { nickname=newValue; }

public String getPassword() { return password; }
public void setPassword(String newValue) { password=newValue; }

public String getError() { return error; }
public void setError(String newValue) { error=newValue; }
}

<s:div id="my_result" >
    <s:property value="error" />
</s:div>

<s:form action="UserManager" theme="simple">
    <s:textfield name="nickname" />
    <s:password name="password" />
    <s:label cssClass="menu_span">
        <sj:submit targets="my_result" value="Login" />
    </s:label>
</s:form>

ОБНОВЛЕНИЕ 2

<package name="model" extends="json-default">
    <action name="UserManager" class="model.UserManager">
        <result type="json" />
    </action>
</package>

1 Ответ

4 голосов
/ 06 декабря 2010

Возвращаемое значение, которое вы возвращаете в методе execute (), должно быть одним из отображенных в качестве значений. Поскольку у вас нет имени результата, подобного этому:

<result name="resultName"></result>

Будет использоваться значение по умолчанию: «успех». Вы должны вернуть значение «success» в метод execute ().

Значение результата метода execute - это имя отображенного результата. Чтобы отправить сообщение, вы должны добавить атрибут String в вашем действии (и получить его для получения), а в методе execute сделать что-то вроде

 this.message = "my message";

Редактировать: как получить сообщение с помощью ajax: Если вы установили сообщение в своем действии в атрибуте «String message» и у вас есть метод получения этого атрибута (public String getMessage ()), вы можете получить эту информацию, получая доступ к этому свойству в объекте, который вы получаете при вызове ajax. Если вы делаете вызов ajax, например, с помощью jquery, вы можете получить его следующим образом:

$.ajax({
    url: '/yourAjaxUrl',
    success: function(data) {
       var message = data.message;
       alert('The message is '+message);
       $('#my_result').html(message);
    }
});

Edit: В XML-коде Struts в теге пакета необходимо определить тип json:

<result-types>
    <result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
    ...
</result-types>

и добавьте json-plugin.jar, который можно скачать здесь

больше информации в http://code.google.com/p/jsonplugin/wiki/Documentation

...