如何保留表单 bean 对象值以便稍后在 Struts 中检索它 1
How to persist form bean object value to retrieve it later in Struts 1
使用Struts1.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>
问题:
现在的问题是,当我输入无效的用户名和密码时,select 语言是德语。最后一种语言 selected 应该保留并在下拉列表中显示为 selected。但是下拉列表已初始化,并且值设置为英语。
提交表单时,会验证字段。如果它们无效,则显示错误消息并将所有值初始化为空。现在在我的例子中,我想存储下拉列表的 selected 值,并希望在验证后显示该值(对于无效用户)。
修改代码:
中豆class
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' 在您的表单 Class 中键入 List
或 Map
。
使用表单中的设置器将列表或映射设置到 langType
。
即使您重定向到同一页面,它也会在您之前选择的下拉列表中保留您的值。
但是你每次想显示的时候都需要设置下拉菜单。
检查这个问题的答案他们已经解释了如何在 Stuts1.x Use List as Dropdown
中使用列表作为下拉列表
在哪里设置DropDownList
不要使用 scriptlet 标记在 JSP 中设置下拉列表。
第一步
在您进入登录页面之前(假设它应该触发一个动作 class)
在该操作中 class 设置您的下拉列表。
在您进入登录页面之前(假设它不会点击操作 class)然后保留另一层 Jsp 或重定向操作,这将点击操作 class 所以在操作中 class 你设置你的下拉列表。
使用Struts1.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>
问题:
现在的问题是,当我输入无效的用户名和密码时,select 语言是德语。最后一种语言 selected 应该保留并在下拉列表中显示为 selected。但是下拉列表已初始化,并且值设置为英语。
提交表单时,会验证字段。如果它们无效,则显示错误消息并将所有值初始化为空。现在在我的例子中,我想存储下拉列表的 selected 值,并希望在验证后显示该值(对于无效用户)。
修改代码:
中豆class
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' 在您的表单 Class 中键入 List
或 Map
。
使用表单中的设置器将列表或映射设置到 langType
。
即使您重定向到同一页面,它也会在您之前选择的下拉列表中保留您的值。 但是你每次想显示的时候都需要设置下拉菜单。
检查这个问题的答案他们已经解释了如何在 Stuts1.x Use List as Dropdown
中使用列表作为下拉列表在哪里设置DropDownList
不要使用 scriptlet 标记在 JSP 中设置下拉列表。
第一步
在您进入登录页面之前(假设它应该触发一个动作 class) 在该操作中 class 设置您的下拉列表。
在您进入登录页面之前(假设它不会点击操作 class)然后保留另一层 Jsp 或重定向操作,这将点击操作 class 所以在操作中 class 你设置你的下拉列表。