如何在Struts 1中保存表单bean对象值以便稍后检索它

时间:2015-06-11 07:16:40

标签: java jsp struts-1

使用Struts 1.3

我有一个登录表单,其中包含用户名,密码和下拉列表,其中包含一些值,如英语,Deutsh等。提交表单时,需要从下拉列表中保留最后一个值。

遵循代码示例。

表单Bean:

public class LoginForm extends ActionForm {

private String locale;

 public void setLocale(String locale) {
                this.locale = locale;
 }

 public String getLocale() {
     return locale;
 }


}

JSP代码:

<html:select property="locale" onchange="refreshPage(this.value)">
    <%
    Locale availableLanguages[] = DAOFactory.getConfigurationDAO().getAvailableLanguages();
    for (int i=0; i<availableLanguages.length; i++) {
        String localeNameKey = "com.web.gui.localeName." + availableLanguages[i].toString();
    %>
    <html:option value="<%= availableLanguages[i].toString() %>"
                 key="<%= localeNameKey %>"/>
    <% 
    }
%>
</html:select>

现在,这个JSP代码生成以下下拉列表:

Drop Downs

Full Login page

的struts-config.xml

<action-mappings>
  <action path="/login" type="com.web.gui.LoginAction" name="loginForm" scope="request" input="/loginForm.jsp">
  <forward name="setLanguage" path="/loginForm.jsp"/>
</action>

</action-mappings>

问题:

现在的问题是,当我输入无效的用户名,密码并选择语言时说Deutsch。选择的最后一种语言应该保留并显示在选定的下拉列表中。但是下拉列表已初始化,值设置为英语。

提交表单后,将验证字段。如果它们无效,则显示错误消息,并将所有值初始化为null。现在在我的情况下,我想存储选定的下拉值,并希望在验证后显示该值(对于无效用户)。

修改了代码:

在Bean类中

public class LoginForm extends ActionForm{
    private Collection dropDownList = null;

    public void setDropDownList(Collection dropDownList){
                    this.dropDownList = dropDownList;
            }

    public Collection getDropDownList(){
            if(dropDownList == null){
                    dropDownList = new Vector(10);
                    Locale availableLanguages[] = DAOFactory.getConfigurationDAO().getAvailableLanguages();
                    Properties properties = loadProperties(Locale.ENGLISH);

                    for(int i=0 ; i<availableLanguages.length ; i++){
                            String localeNameKey = "com.web.gui.localeName." + availableLanguages[i].toString();
                            String value = availableLanguages[i].toString();
                            String key = properties.getProperty(localeNameKey);
                            dropDownList.add(new LabelValueBean(key,value));
                    }
            }
            return dropDownList;
    }
}

在jsp:

<html:select property="locale" onchange="refreshPage(this.value)">
    <html:optionsCollection property="dropDownList"/>
</html:select>      

1 个答案:

答案 0 :(得分:1)

好!!

首先不要使用Scriptlet标签,这是不好的做法。

由于您使用Struts1.x struts支持使用Tag库选择标记。

以下是使用dorpdown的示例代码片段。

                <html:select property="langType">
                    <html:optionsCollection property="dropDownList"   value="key"
                        label="value" />   
                </html:select>

创建一个memeber元素&#39; langType&#39;在表单类中键入ListMap。 使用表单中的setter将列表或映射设置为langType

即使您重定向到同一页面,它也会在您之前选择的下拉列表中保留您的值。 但是每当你想要展示时,你需要每次都设置下拉列表。

检查此问题的答案他们已经解释了如何在Stuts1.x中使用列表作为下拉列表Use List as Dropdown

在哪里设置DropDownList

不要使用scriptlet标记在JSP中设置下拉列表。

Step1

在您登录页面之前(假设它应该点击一个动作类) 在该动作类中设置下拉列表。

在你进入你的登录页面之前(假设它不会点击动作类)然后保留另一层Jsp或重定向动作,这将触及动作类,所以在动作类中设置你的下拉列表。