Java 如何使用复选框列表在struts 2中获取多个复选框值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18740444/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to get multiple checkbox value in struts 2 using checkbox list
提问by user251287
Hi I am new to struts 2 , Can somebody tell me how to get multiple checkbox value in struts 2. So far i have developed the code which is as follows. i am getting the error
嗨,我是 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)
My jsp page to get the values is
我获取值的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>
my jsp page to show the values is
我的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"/>/>
my action file is
我的动作文件是
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;
}
}
My struts.xml file is
我的 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>
and my web.xml file is
我的 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>
采纳答案by Jay Trivedi
- struts.xml:
- struts.xml:
<action name="subscription_listing" method="UploadProfile" class="com.javapoint.UploadProfile" >
<result name="none">/your_jsppage_where_you_have_checkboxlist</result>
</action>
<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 class modified Uploadprofile method:
2.在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]. Now Directly call subscription_listing action.
[3]。现在直接调用 subscription_listing 操作。
Do you got it?
你明白了吗?
回答by Macrosoft-Dev
回答by user251287
After surfing and implementing the above sugesstion ,I have come to solution that call the action file directly in case of chekbox,although there can be alternates but as of now i am unaware of it.
在浏览并实施上述建议后,我找到了在 chekbox 的情况下直接调用动作文件的解决方案,虽然可以有替代方案,但截至目前我不知道。
the problem is with my struts.xml it should be
问题出在我的 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>
and the final action file is
最后的动作文件是
package com.javapoint;
包 com.javapoint;
import java.util.ArrayList; import java.util.List;
导入 java.util.ArrayList; 导入 java.util.List;
import com.opensymphony.xwork2.ActionSupport;
导入 com.opensymphony.xwork2.ActionSupport;
public class UploadProfile extends 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;
}
}

