使用Struts 1.3
我有一个登录表单,其中包含用户名,密码和下拉列表,其中包含一些值,如英语,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-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>
问题:
现在的问题是,当我输入无效的用户名,密码并选择语言时说Deutsch。选择的最后一种语言应该保留并显示在选定的下拉列表中。但是下拉列表已初始化,值设置为英语。
提交表单后,将验证字段。如果它们无效,则显示错误消息,并将所有值初始化为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>
答案 0 :(得分:1)
好!!
首先不要使用Scriptlet标签,这是不好的做法。
由于您使用Struts1.x
struts支持使用Tag库选择标记。
以下是使用dorpdown的示例代码片段。
<html:select property="langType">
<html:optionsCollection property="dropDownList" value="key"
label="value" />
</html:select>
创建一个memeber元素&#39; langType&#39;在表单类中键入List
或Map
。
使用表单中的setter将列表或映射设置为langType
。
即使您重定向到同一页面,它也会在您之前选择的下拉列表中保留您的值。 但是每当你想要展示时,你需要每次都设置下拉列表。
检查此问题的答案他们已经解释了如何在Stuts1.x中使用列表作为下拉列表Use List as Dropdown
在哪里设置DropDownList
不要使用scriptlet标记在JSP中设置下拉列表。
Step1
在您登录页面之前(假设它应该点击一个动作类) 在该动作类中设置下拉列表。
在你进入你的登录页面之前(假设它不会点击动作类)然后保留另一层Jsp或重定向动作,这将触及动作类,所以在动作类中设置你的下拉列表。