有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在struts2中从底层bean生成表单显示数据?

我希望来自JavaBean的数据显示在jsp页面的struts <s:form>上。这样用户就可以查看数据库中存储的内容,并进行编辑

下面是我的用户bean操作类

public class UserAction extends ActionSupport implements ModelDriven<User> {

    @Valid
    private User user = new User();

        @Override
    public User getModel() {
        return user;
    }

    public User getUser() {
        return user;
    }

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

下面是我的jsp页面,在加载页面时应该显示用户的属性:

<s:form action="createEditUser" method="post">
        <s:push value="user" />
        <s:textfield key="name" />
        <s:radio list="{'Male','Female'}" key="gender" />
        <s:select list="{'USA','Ukraine','Urugvay','Uganda'}" key="country" />
        <s:textarea cols="20" rows="10" key="aboutYou" />
        <s:checkbox key="mailingList" />
        <s:submit key="submit" />
    </s:form>

当用户单击链接访问此表单时,相应的用户对象将从db加载并分配给UserAction.user变量

但上面的表单不显示用户名、性别等属性。用户对象填充了数据,但表单没有。 我以为<s:push value='user' />会帮我,但没有

你不知道怎么了吗

编辑。下面是从数据库中获取用户的代码:

public String getUserById() {
        HttpServletRequest servletrequest = (HttpServletRequest) ActionContext.getContext().get(
                ServletActionContext.HTTP_REQUEST);
        try {
            user = userDao.read(Long.parseLong(servletrequest.getParameter("userId")));
            newUser = false;
            System.out.println("method getUserById()=" + user);
        } catch (HibernateException | NumberFormatException e) {
            e.printStackTrace();
            return INPUT;
        }
        return SUCCESS;
    }

已成功获取用户。它是印刷的

User user = new User();用于创建新用户并将其保存到数据库中

我的拦截器在struts中。xml:

<interceptors>
            <interceptor-stack name="strutscrudStack">
                <interceptor-ref name="defaultStackHibernate">
                    <param name="exception.logEnabled">true</param>
                    <param name="exception.logLevel">DEBUG</param>
                    <param name="params.excludeParams">^struts\..*</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="strutscrudStack"/>

这是一个调用getUserById()的操作:

<action name="gotoEditUser" class="com.strutscrud.action.UserAction" method="getUserById">
            <result name="success">/createUpdateUser.jsp</result>
            <result name="input">/allUsers.jsp</result>
        </action>

谢谢!


共 (1) 个答案

  1. # 1 楼答案

    为了显示从db用户对象加载的数据,我必须在action类中使用ModelDriven接口,在jsp页面中使用<s:push>标记

    所以,我的UserAction类没有改变,但jsp页面得到了<s:push>

    <s:form action="createEditUser" method="post">
            <s:push value="user">
                <s:textfield key="name" />
                <s:radio list="{'Male','Female'}" key="gender" />
                <s:select list="{'USA','Ukraine','Urugvay','Uganda'}" key="country" />
                <s:textarea cols="20" rows="10" key="aboutYou" />
                <s:checkbox key="mailingList" />
                <s:submit key="submit" />
            </s:push>
        </s:form>