当前位置: 首页 > 知识库问答 >
问题:

如何将表单bean对象值持久化,以便在Struts 1中稍后检索它

郑正阳
2023-03-14

使用Struts 1.3

我有一个带有用户名、密码的登录表单,还有一个带有一些值的下拉列表,比如English、Deutsh等等。提交表单时,需要从下拉列表中保留最后一个值。

遵循代码示例。

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配置。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>

问题:

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

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

修改代码:

豆子课

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个答案

郑富
2023-03-14

可以

首先,不要使用Scriptlet标签,这是一种糟糕的做法。

因为您使用的是Struts1。xstruts支持使用标签库选择标签。

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

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

在表单类中创建memeber元素“langType”类型ListMap。在表单中使用setter设置列表或映射到该langType

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

检查这个问题,回答他们已经解释了如何在Stuts1中使用列表作为下拉列表。x使用列表作为下拉列表

在哪里设置DropDownList

不要使用scriptlet标记在JSP中设置dropdownlist。

第一步

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

在进入登录页面之前(假设它不会点击action类),请保留另一层Jsp或重定向操作,它会点击action类,所以在action类中设置下拉列表。

 类似资料:
  • 问题内容: 我对学习Node and Express并不陌生,但我仍在尝试用express围绕代码流。假设我们在session.js中有如下代码: 假设用户是必需的mongo模式。我发现奇怪的是session.user分配: 由于req变量在重定向后将超出范围,但是我们显然是在执行此操作以保留用户数据,因此我需要弄清楚以下哪种情况描述了正在发生的情况。(A)被分配给req参数的参数(在调用回调时)

  • Hibernate 认为持久化类(persistent class)新实例化的对象是瞬时(Transient)的。我们可通过将瞬时(Transient)对象与 session 关联而把它变为持久的(Persistent)。 DomesticCat fritz = new DomesticCat(); fritz.setColor(Color.GINGER); fritz.setSex('M');

  • 我有一个显示sql连接列表的页面。该表中的一个字段是databaseType,它在枚举中定义: 为了创建和编辑对象,我在选择框中填充以下内容: 填充该表单的DTO对象是: 问题是所有字符串字段都是持久化的,而不是复杂类型的字段。 列出所有创建对象的表定义为: 渲染出来的是: 在开始使用Thymeleaf之前,我使用的是JSP,表定义非常相似,我得到了databaseType值,没有任何问题。 切换

  • 我需要一些帮助。是为了我的学校项目。仅供参考,我使用过的一些符号: 我已经包括了我的代码要点,希望足以查看!

  • 我有一个程序,其类类似于下面的基本示例: 我希望能够做的是写一个 对象。我想,我必须要么构造实际的对象来显示它们。 谢谢你!

  • 我正在尝试开发一些代码来显示bot何时上线,并让嵌入的消息颜色每2秒改变一次其他的东西。(2000ms)但我不知道是怎么回事,我得到一个错误,说或类似的东西。 我所做的是...创建超时。编辑该消息,但它将为uptime部分显示不同的消息/输出。删除并发送消息。 我希望当它联机时,它会发送嵌入消息,然后2秒钟后,它会编辑颜色,等等。 输出是一个bot给出了一个错误,或者根本不工作。