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

How to persist form bean object value to retrieve it later in Struts 1

使用Struts1.3

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

遵循代码示例。

表单 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 代码生成以下下拉列表:

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>

问题:

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

提交表单时,会验证字段。如果它们无效,则显示错误消息并将所有值初始化为空。现在在我的例子中,我想存储下拉列表的 selected 值,并希望在验证后显示该值(对于无效用户)。

修改代码:

中豆class

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>      

好的!!

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

由于您使用的是 Struts1.x struts 支持 Select 标签及其标签库。

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

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

创建一个成员元素 'langType' 在您的表单 Class 中键入 ListMap。 使用表单中的设置器将列表或映射设置到 langType

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

检查这个问题的答案他们已经解释了如何在 Stuts1.x Use List as Dropdown

中使用列表作为下拉列表

在哪里设置DropDownList

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

第一步

在您进入登录页面之前(假设它应该触发一个动作 class) 在该操作中 class 设置您的下拉列表。

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