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

标签 java jsp struts-1

使用 Struts 1.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 代码生成以下下拉列表:

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>

问题:

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

提交表单后,字段将被验证。如果它们无效,则显示错误消息并将所有值初始化为 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>      

最佳答案

好的!!.

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

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

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

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

在表单类中创建一个成员元素“langType”类型 ListMap。 使用表单中的 setter 将列表或映射设置到该 langType 中。

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

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

在哪里设置 DropDownList

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

步骤1

在您进入登录页面之前(假设它应该点击操作类) 在该操作类中设置您的下拉列表。

在您进入登录页面之前(假设它不会命中操作类),然后保留另一层 Jsp 或重定向操作,它将命中操作类,因此在操作类中您设置下拉列表。

关于java - 如何保存表单 bean 对象值以便稍后在 Struts 1 中检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774092/

相关文章:

java - C# 服务器和 Java 客户端 TCP

java - 如何从 Jsp 页面 (Web) 调用 Jbutton(Swing)?

Java servlet 异步上下文存在查询

java - 注销后返回时验证用户

java - 在任何范围内都找不到 bean org.apache.struts.taglib.html.BEAN

java - 使用 Apache POI 读取 MS-word 文件中表格单元格内的 UTF-8 编码文本内容

java - 多线程不平衡Java

用于类的不存在属性的Java getter

java - 从 ConcurrentMap 中获取和删除所有当前条目

java - 如何在JSP中显示oracle(10g)查询结果?