嗨,我是struts 2的新手, 有人可以告诉我如何在struts 2中获得多个复选框值。 到目前为止,我已经开发了如下代码。 我收到了错误
tag 'checkboxlist', field 'list', name 'subscribe': The requested list key 'subscription' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
at org.apache.struts2.components.Component.fieldError(Component.java:240)
at org.apache.struts2.components.Component.findValue(Component.java:333)
at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:80)
at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:875)
at org.apache.struts2.components.UIBean.end(UIBean.java:523)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
at jsp_servlet.__step1._jsp__tag6(__step1.java:371)
at jsp_servlet.__step1._jsp__tag0(__step1.java:148)
at jsp_servlet.__step1._jspService(__step1.java:86)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
获取值的jsp页面是
<link href="style.css" rel="stylesheet" type="text/css"/>
<%@ taglib uri="/struts-tags" prefix="s" %>
<table class="profiletable" align="center">
<tr>
<td align="center"><h2>Upload User Profile</h2></td>
</tr>
<tr>
<td align="center"><s:form action="upload" method="post">
<s:textfield name="fname" label="First Name"></s:textfield>
<s:textfield name="lname" label="Last Name"></s:textfield>
<s:radio name="mstatus" label="Martial Status" list="{'Single','Married'}"></s:radio>
<s:radio name="gender" label="Gender" list="{'male','female'}"></s:radio>
<s:select list="{'India','USA','UK','Germany','France','Australia'}" label="Country" name="country"></s:select>
<s:checkboxlist label="Letter you want to subscribe" name="subscribe" list="subscription" />
<s:submit value="upload profile" align="center"></s:submit>
</s:form></td>
</tr>
</table>
我的jsp页面显示的值是
<%@ taglib uri="/struts-tags" prefix="p" %>
<h2>Profile uploaded sucessfully</h2>
First Name:<p:property value="fname"/><br/>
Last Name:<p:property value="lname"/><br/>
Martial status:<p:property value="mstatus"/><br/>
Gender:<p:property value="gender"/><br/>
Country:<p:property value="country"/><br/>
Letters Subscribed:<p:property value="subscribe"/>/>
我的操作文件是
package com.javapoint;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class UploadProfile extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String fname;
private String lname;
private String mstatus;
private String gender;
private String country;
private String subscribe;
private List<String> subscription;
public String getFname() {
System.out.println("inside getfname");
return fname;
}
public void setFname(String fname) {
System.out.println("inside getfname");
System.out.println("the firstname set is "+fname);
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
System.out.println("the lastname set is "+ lname);
}
public String getMstatus() {
return mstatus;
}
public void setMstatus(String mstatus) {
this.mstatus = mstatus;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getSubscribe() {
return subscribe;
}
public void setSubscribe(String subscribe) {
this.subscribe = subscribe;
}
public List<String> getSubscription() {
return subscription;
}
public void setSubscription(List<String> subscription) {
this.subscription = subscription;
}
public UploadProfile(){
subscription=new ArrayList<String>();
subscription.add("Politics");
subscription.add("Sports");
subscription.add("Editorial");
subscription.add("Gadgets");
subscription.add("Overdrive");
}
public String execute()throws Exception{
System.out.println("inside execute");
if(fname!=null){
return "profileuploaded";
}else{
return "error";
}
}
public String display(){
return NONE;
}
}
我的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="default" extends="struts-default">
<action name="product" class="com.javapoint.Product">
<result name="success">welcome.jsp</result>
</action>
<action name="upload" class="com.javapoint.UploadProfile">
<result name="profileuploaded">ProfileUploaded.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
</struts>
我的web.xml文件是
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>step1.jsp</welcome-file>
</welcome-file-list>
答案 0 :(得分:3)
<action name="subscription_listing" method="UploadProfile" class="com.javapoint.UploadProfile" >
<result name="none">/your_jsppage_where_you_have_checkboxlist</result>
</action>
2.in Uploadprofile Action类修改了Uploadprofile方法:
public String UploadProfile(){
subscription=new ArrayList<String>();
subscription.add("Politics");
subscription.add("Sports");
subscription.add("Editorial");
subscription.add("Gadgets");
subscription.add("Overdrive");
return NONE;
}
[3]。现在直接调用subscription_listing动作。
你明白了吗?
答案 1 :(得分:1)
由于您是Struts2的新用户,希望此example可以帮助您处理struts2中的多个复选框
答案 2 :(得分:0)
在浏览并实施上述内容之后,我已经找到了解决方案,在chekbox的情况下直接调用动作文件,虽然可以有替代但是截至目前我还没有意识到它。
问题在于我的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="default" extends="struts-default">
<action name="upload" class="com.javapoint.UploadProfile">
<result name="profileuploaded">ProfileUploaded.jsp</result>
<result name="error">index.jsp</result>
</action>
<action name="UploadProfile" class="com.javapoint.UploadProfile" method="display">
<result name="none">/step1.jsp</result>
</action>
</package>
</struts>
,最终的操作文件是
package com.javapoint;
import java.util.ArrayList; import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
公共类UploadProfile扩展了ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String fname;
private String lname;
private String mstatus;
private String gender;
private String country;
private String[] defaultsubscription;
private String[] yoursubscription;
private List<String> subscription;
public String getFname() {
System.out.println("inside getfname");
return fname;
}
public void setFname(String fname) {
System.out.println("inside getfname");
System.out.println("the firstname set is "+fname);
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
System.out.println("the lastname set is "+ lname);
}
public String getMstatus() {
return mstatus;
}
public void setMstatus(String mstatus) {
this.mstatus = mstatus;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
System.out.println(country);
}
public String[] getYoursubscription() {
return yoursubscription;
}
public void setYoursubscription(String[] yoursubscription) {
this.yoursubscription = yoursubscription;
}
public UploadProfile(){
System.out.println("inside constructor");
subscription=new ArrayList<String>();
subscription.add("Politics");
subscription.add("Sports");
subscription.add("Editorial");
subscription.add("Gadgets");
subscription.add("Overdrive");
}
public String[] getDefaultSubscription(){
return new String [] {"Politics", "Sports"};
}
public List<String> getSubscription() {
return subscription;
}
public void setSubscription(List<String> subscription) {
this.subscription = subscription;
}
public String execute()throws Exception{
System.out.println("inside execute");
System.out.println(yoursubscription.toString()+" "+subscription+" "+defaultsubscription);
if(fname!=null){
return "profileuploaded";
}else{
return "error";
}
}
public String display() {
return NONE;
}
}