简体   繁体   English

如何使用复选框列表在struts 2中获取多个复选框值

[英]how to get multiple checkbox value in struts 2 using checkbox list

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. 嗨,我是struts 2的新手,有人可以告诉我如何在struts 2中获得多个复选框值。到目前为止,我已经开发了如下代码。 i am getting the error 我收到了错误

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>

  1. 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>

2.in Uploadprofile Action class modified Uploadprofile method: 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]. [3]。 Now Directly call subscription_listing action. 现在直接调用subscription_listing操作。

Do you got it? 你有吗?

由于您是Struts2的新手,希望此示例可以帮助您使用struts2中的多个复选框

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. 冲浪和实现上述sugesstion之后,我已经找到了解决方案,在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.ArrayList; import java.util.List; import java.util.List;

import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionSupport;

public class UploadProfile extends ActionSupport { public class 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;
}



}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM