使用 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 代码生成以下下拉列表:
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”类型 List
或 Map
。
使用表单中的 setter 将列表或映射设置到该 langType
中。
即使您重定向到同一页面,它也会在您之前选择的下拉列表中保留该值。 但是您每次想要显示时都需要设置下拉菜单。
检查这个问题的答案,他们已经解释了如何在 Stuts1.x Use List as Dropdown 中使用列表作为下拉菜单
在哪里设置 DropDownList
不要使用 scriptlet 标签在 JSP 中设置下拉列表。
步骤1
在您进入登录页面之前(假设它应该点击操作类) 在该操作类中设置您的下拉列表。
在您进入登录页面之前(假设它不会命中操作类),然后保留另一层 Jsp 或重定向操作,它将命中操作类,因此在操作类中您设置下拉列表。
关于java - 如何保存表单 bean 对象值以便稍后在 Struts 1 中检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774092/