0

struts2 に編集機能を実装しました。送信ボタンをクリックすると、JSP に表示された Bean 値がアクション クラスで正しく取得されます。

しかし、JSP で言及していない Bean の他の値は null を返しています。

JSP で Bean のすべての値を表示すると、Action ですべての値を取得できます。

これは、この問題を解決する方法です。または、他の方法があります。

Action クラスのコードは次のとおりです。

 UserForm userForm = new UserForm();

public String edit(){
    String result = ActionSupport.ERROR;
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
        HttpSession session = request.getSession(false);
        if (null != session
                && null != (UserAccount) session.getAttribute(USER)) {
            String editUser = (String) request
            .getParameter(RequestAttributes.EDIT_USER);
            UserAccount userAccount = userForm.getUserAccount();
        if (null != editUser) {
                    //invoked when edit user page is submitted
            userUtils.updateUserAccount(userAccount);

        } else {
                    // invoked when edit user page gets loaded
            String userAccSID = (String) request
                    .getParameter(USER_ACC_SID);
            String roleSID = (String) request.getParameter(ROLE_SID);
            if (null != userAccSID && null != roleSID) {
                Long userAccSIDVal = Long.valueOf(userAccSID);
                Long roleSIDVal = Long.valueOf(roleSID);
                userAccount = userUtils
                        .loadUserAccount(userAccSIDVal);
                userForm.setUserAccount(userAccount);
            }
        }
    } 

    return result;
}

public UserForm getUserForm() {
    return userForm;
}

public void setUserForm(UserForm userForm) {
    this.userForm = userForm;
}

JSPページのコードは

<s:form action="edit?editUser=edit">
<table align="center">
                    <s:hidden name="userForm.userAccount.createdBy"/>
        <tr align="center">
            <th>Edit User</th>
        </tr>
        <tr>
            <td><s:textfield name="userForm.userAccount.firstName" label="First Name"/></td>
        </tr>
        <tr>
            <td><s:textfield name="userForm.userAccount.lastName" label="Last Name"/></td>
        </tr>

        <tr>
            <td><s:submit value="Save" /><s:reset value="Cancel" /></td>
        </tr>
</table>

ここで、createdBy を非表示にすると、アクションで createdBy の値を取得できます。その値は、アクション クラスによって既に設定されています。では、なぜjspページにも設定する必要があるのですか?

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

JSP から値を返さない場合、フォーム送信時に Action クラスでどのように値を使用できますか。1 つの解決策は、隠しフィールドを作成し、JSP ページでユーザーに表示したくない値を設定することです。このようにして、送信ボタンを押すと、これらの値がアクションに送信されます。

他のオプションは、セッションにデータを保存するか、アクション クラスに値を取得することですが、他のオプションがなくなるまで、これらは望ましい解決策ではありません。

于 2012-09-17T12:25:42.287 に答える