即使没有value属性,Struts 2 textfield也会显示该值

时间:2013-09-23 03:24:29

标签: java jsp struts2 ognl valuestack

我有一个Struts 2 textfield标记,我只需要让用户输入值并发送给操作。

<s:textfield name="user.firstAnswer" size="110" cssClass="FormObjectCompulsary" autocomplete="off" />

即使此页面加载用户对象包含第一个答案的值,我也不想在文本字段中显示它,而是希望文本字段为空。

但是如果没有指定值属性,则仍然会在此字段中显示用户对象中的值。

3 个答案:

答案 0 :(得分:1)

如果要添加新对象user,则应在使用new运算符创建此对象,然后再在JSP中显示它。它将包含未显示的null个引用。如果未指定value属性,则name用于显示值。

答案 1 :(得分:0)

execute()内部后,将您的用户对象设为null。所以它再次不会在文本框中显示值。

例如。 user = null;

我正在向您展示一段代码,可能会对您有所帮助。 请参阅execute()

package online.solution;

import com.opensymphony.xwork2.Action;

public class MyAction implements Action {

    UserBean user = new UserBean();

    public UserBean getUser() {
        return user;
    }

    public void setUser(UserBean user) {
        this.user = user;
    }

    @SuppressWarnings("finally")
    @Override
    public String execute() throws Exception {
        String result = "";
        try {
            user.setGuest("Bye bye");
            System.out.println(user.getUsername() + " " + user.getPassword());

            if (user.getUsername().equals(user.getPassword())) {
                result = SUCCESS;
            }
            else {
                result = ERROR;
            }
            user = null; //Make it null when all task completed.
        }
        catch (Exception exception) {
            System.out.println("Exception -> " + exception);
        }
        finally {
            return result;
        }
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}

答案 2 :(得分:0)

通过查看name="user.firstAnswer"我认为您正在实施ModelDriven&lt;&gt;到你的动作课。可能发生的事情是,当您在动作类中返回成功并进入jsp页面时,如果在行动中您的用户模型上有一些值...模型驱动将在您的JSP页面上为您设置这些字段。

我在学习struts2时使用了这种方法来更新表单功能。在返回之前,请确保用户对象不包含任何内容...