这是一个执行以下操作的小型测试应用程序
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> </head>
<body>
<form action="MyName">
<s:textfield name="UserName" label="Enter Your Name"/>
<s:submit/>
</form><br>
</body>
</html>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="module1" namespace="" extends="struts-default">
<action name="MyName" class="module1.User">
<result>/Welcome.jsp</result>
</action>
<action name="Blood_Group" class="module1.SelectBloodGroup" method="bloodGroupList"/>
</package>
</struts>
SelectBloodGroup.java
package module1;
import java.util.ArrayList;
import com.opensymphony.xwork2.ActionSupport;
public class SelectBloodGroup extends ActionSupport{
private ArrayList<BloodGroup> bglist;
public String bloodGroupList(){
bglist = new ArrayList<BloodGroup>();
bglist.add(new BloodGroup("1","A+"));
bglist.add(new BloodGroup("2","B+"));
bglist.add(new BloodGroup("3","AB+"));
bglist.add(new BloodGroup("4","O+"));
bglist.add(new BloodGroup("5","A-"));
bglist.add(new BloodGroup("6","B-"));
bglist.add(new BloodGroup("7","AB-"));
bglist.add(new BloodGroup("8","O-"));
return "SUCCESS";
}
public ArrayList<BloodGroup> getBglist(){
return bglist;
}
}
class BloodGroup{
private String id;
private String bg;
BloodGroup(String id,String bg){
this.id=id;
this.bg=bg;
}
}
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:action name="Blood_Group" executeResult="false"/>
//***************here is the problem***************
<s:select list="bglist" listKey="id" listValue="bg"/>
//***********************************************
</body>
</html>
Struts无法将bglist
标识为集合或数组或列表或迭代器。我应该分配什么来列出s中的属性:选择TAG IN THE FILE welcome.jsp
代码有什么问题请详细告诉我。如果你能给我发正确的版本。为什么<s:action>
标签不起作用?
这是我得到的错误
2010年4月13日下午1:49:19 org.apache.catalina.core.ApplicationDispatcher 调用SEVERE:Servlet.service() servlet jsp抛出异常标记 'select',字段'list':请求的 列表键'bglist'不可能 解决了 收集/阵列/图/枚举/迭代 类型。例如:人或人。{name} - [未知位置]
答案 0 :(得分:0)
看来你误解了基本的struts2流程。
页面welcome.jsp是动作“MyName”(错误名称,BTW)的结果页面(视图)。这意味着,当生成welcome.jsp页面时,操作“MyName”(类module1.User)刚刚被“执行”,它就是那个对象(类module1.User的一个实例)。显示结果时显示“范围”(值堆栈)。 因此,welcome.jsp正在寻找module1.User类中的“bglist”列表。
您需要重新考虑动作映射。
(你的混淆可能与你的陈述有关“因为index.jsp是welcome.jsp页面的结果”......你必须认为jsp页面是ACTIONS的结果,而不是其他jsps的结果)
答案 1 :(得分:0)
bglist 是在Action SelectBloodGroup 中声明和定义的,它永远不会进入上下文。 您的应用程序的流程是 Index.jsp(submit) - &gt; module1.User(Action) - &gt; welcome.jsp ,所以 bglist 从未实例化,也没有调用您的类 SelectBloodGroup 。
如果你想在动作中使用初始化你的bglist然后把它放在module1.User中,或者你也可以在jsp中给出list的值,如果这些值是硬编码的(似乎是)或最佳练习你可以将资源包用于静态值(比硬编码更好)。
要在jsp选择列表中提供硬编码值,您可以使用以下代码:
<select name="bgList" id="bgListId">
<option value="1">Bpositive</option>
<option value="someValue">someLabel</option>
</select>
请在声明变量时尝试使用camelCase模式。 希望这会有所帮助。