【问题标题】:How to persist form bean object value to retrieve it later in Struts 1如何在 Struts 1 中持久化表单 bean 对象值以便稍后检索它
【发布时间】:2015-08-26 18:04:37
【问题描述】:

使用 Struts 1.3

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

按照代码示例。

表单豆:

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>

问题:

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

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

【问题讨论】:

  • 显示你的struts-config.xml
  • 添加了 struts-config.xml 文件。请检查。
  • @primitiveType 我已经添加了 struts-config.xml 文件代码。请检查并更新。有没有人可以帮助我解决这个问题。
  • 是的,我们都在这里做同样的事情......你需要提供信息
  • 你想说的是,如果表单提交并且名称/pass而不是语言有错误,那么语言必须是预先选择的?

标签: java jsp struts-1


【解决方案1】:

好的!!。

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

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

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

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

在您的表单类中创建一个成员元素“langType”类型List 或Map。 使用表单中的设置器设置列表或映射到 langType。

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

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

在哪里设置 DropDownList

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

第一步

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

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

【讨论】:

  • 我做了你上面说的所有事情,但无法理解我应该在哪里设置struts action或jsp中的下拉列表。还向您发送我到目前为止所做的代码。检查修改后的代码标题
  • 我想存储下拉列表中最后选择的值,并在页面刷新后进一步设置。
  • @user958324 你想存储什么意思?你想把它存储在数据库中吗?我的理解是你想在用户输入无效登录时显示用户在下拉列表中选择的内容我正确吗?
  • 是的,你是对的。最后选择的值应该被持久化到相应的 bean。
  • 得到了解决方案。在我的代码中,mapping.findForward("login") 设置为操作类,我认为它将所有数据刷新为其初始值。检查我提到的 struts-config.xml 文件。
猜你喜欢
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多