Java 如何在使用struts2从动态创建的下拉列表中选择值后调用操作
在这里,我使用这个创建了动态下拉列表,但当我从可用列表中选择一些值时,应该在action类中调用它。 可以在图像中看到的下拉列表,这里的值是从数据库动态加载的,现在我想要的是当我从两个下拉列表中选择任何值时,这些值(我是指文本值)应该发送到action类,在那里我将根据这两个值执行一个JDBC select查询,并显示在图中所示的表中,但所有内容都应该加载。操作应该是从下拉列表中选择值,而不是单击任何按钮。使用静态值,我可以将下拉列表中的值调用到具有Java 如何在使用struts2从动态创建的下拉列表中选择值后调用操作,java,jsp,struts2,Java,Jsp,Struts2,在这里,我使用这个创建了动态下拉列表,但当我从可用列表中选择一些值时,应该在action类中调用它。 可以在图像中看到的下拉列表,这里的值是从数据库动态加载的,现在我想要的是当我从两个下拉列表中选择任何值时,这些值(我是指文本值)应该发送到action类,在那里我将根据这两个值执行一个JDBC select查询,并显示在图中所示的表中,但所有内容都应该加载。操作应该是从下拉列表中选择值,而不是单击任何按钮。使用静态值,我可以将下拉列表中的值调用到具有name属性的操作类。但在这种情况下,我不能:
name
属性的操作类。但在这种情况下,我不能:(我希望我现在明白了 我曾尝试使用listkey、name和id调用select标记,但均无效。
下面是我的JSP代码:
事件名称:
公司名称:
用于加载动态下拉列表的操作类:
package com.ca.actions;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.ca.database.Database;
import com.ca.pojo.Event;
import java.sql.PreparedStatement;
import com.opensymphony.xwork2.ActionSupport;
public class RetrieveEvNaCoNaAction extends ActionSupport {
private static final long serialVersionUID = -5418233715172672477L;
List<Event> dataForBillsJspList;
private List state = new ArrayList();
private List status = new ArrayList();
String eventName;
public String getEventName() {
return eventName;
}
public void setEventName(String eventName) {
this.eventName = eventName;
}
public RetrieveEvNaCoNaAction() {
// TODO Auto-generated constructor stub
}
public List<Event> getDataForBillsJspList() {
return dataForBillsJspList;
}
public void setDataForBillsJspList(List<Event> dataForBillsJspList) {
this.dataForBillsJspList = dataForBillsJspList;
}
public List getStatus() {
return status;
}
public void setStatus(List status) {
try {
Database database = new Database();
Connection con = database.Get_Connection();
PreparedStatement ps = con
.prepareStatement("SELECT EVENT_NAME,COMPANY_NAME,date_format(FROM_DATE,'%d/%m/%Y') as dateAsFrom,date_format(TO_DATE,'%d/%m/%Y') as dateAsTo FROM EVENT");
ResultSet rs = ps.executeQuery();
//dataForBillsJspList = new ArrayList<Event>();
while (rs.next()) {
/*dataForBillsJspList.add(new Event(rs.getString("EVENT_NAME"),
rs.getString("COMPANY_NAME"), rs
.getString("dateAsFrom"), rs
.getString("dateAsTo")));
System.out.println(rs.getString("EVENT_NAME"));*/
status.add(rs.getString("COMPANY_NAME"));
}
System.out.println("Data Collected ...");
}catch(Exception e)
{
e.printStackTrace();
}
}
public List getState() {
return state;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
setState(this.state);
setStatus(this.status);
return "success";
}
public String showEventDetails(){
System.out.println("Hi.."+eventName);
return SUCCESS;
}
public void setState(List state) {
//implement the application specific logic to
try {
Database database = new Database();
Connection con = database.Get_Connection();
PreparedStatement ps = con
.prepareStatement("SELECT EVENT_ID,EVENT_NAME,COMPANY_NAME,CONTACT_PERSON,CONTACT_NO,EMAIL_ID,EVENT_VENUE,date_format(FROM_DATE,'%d/%m/%Y') as dateAsFrom,date_format(TO_DATE,'%d/%m/%Y') as dateAsTo ,EVENT_TIME FROM EVENT");
ResultSet rs = ps.executeQuery();
dataForBillsJspList = new ArrayList<Event>();
while (rs.next()) {
dataForBillsJspList.add(new Event(rs.getString("EVENT_ID"),rs.getString("EVENT_NAME"),
rs.getString("COMPANY_NAME"),rs.getString("CONTACT_PERSON"),rs.getString("CONTACT_NO"),rs.getString("EMAIL_ID"),rs.getString("EVENT_VENUE"), rs
.getString("dateAsFrom"), rs
.getString("dateAsTo"),rs.getString("EVENT_TIME")));
//System.out.println(rs.getString("EVENT_NAME"));
state.add(rs.getString("EVENT_NAME"));
System.out.println(rs.getString("EVENT_ID"));
}
System.out.println("Data Collected ...");
}catch(Exception e)
{
e.printStackTrace();
}
//Here for displaying the data on UI, we are using few hardcoded values//
}
}
下面是action类,我试图使用name属性调用该选定值:
package com.ca.actions;
import com.ca.pojo.Dropdown;
import com.opensymphony.xwork2.ActionSupport;
public class DropdownAction extends ActionSupport
{
Dropdown dp;
public DropdownAction() {
// TODO Auto-generated constructor stub
}
public Dropdown getDp() {
return dp;
}
public void setDp(Dropdown dp) {
this.dp = dp;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(dp.getEventState());
return "success";
}
}
struts.xml已正确配置。现在,在选择两个值后,我希望在下表中相应地显示数据,而无需单击任何按钮,但在jsp中,我创建了一个按钮,以查看我是否在action类中获取所选值,但实际上,我希望它无需单击任何按钮。使用Javascript/jQuery可以做到这一点取决于你到达动作类后想做什么 如果要导航到其他页面,请使用下面的代码 将
onchange
事件作为属性添加到下拉列表中
onchange="customFunction(this.value)"
在标题部分创建customFunction
function customFunction(selectedValue){
window.location="Action_URL?myValue="+selectedValue;
}
或者如果要返回相同的页面,请使用
希望这能有所帮助。嗯,这里一团糟:D 首先,抛出NullPointerException是因为值未发送,而值未发送是因为它们不在表单中 您应该将它们以如下形式封装起来,以便将它们发送到
ActionSelect
操作:
事件名称:
公司名称:
解决了迷雾,但这并不能解决你的问题
有两种主要方式可以从页面联系操作:
- 使用标准提交(正如您所做的那样): 您可以提交一个表单及其内容,或者通过最终在querystring中传递参数来调用链接。这将创建一个请求,该请求将联系一个操作,该操作将返回一个完整的JSP,该JSP将被加载到当前页面的位置
- 使用AJAX:
您可以在不更改当前页面的情况下发布或获取某个操作,该操作可以返回任何内容,如JSP代码段、JSON结果、二进制结果(通过Struts2流结果)等
然后,您可以选择如何处理返回的数据,例如,将其加载到以前为空或具有不同内容的
中
“success”
结果的对象是什么(整个JSP或JSP片段),它将被加载到您所在的JSP的位置,并且它将失败
由于您对这一点似乎很陌生,我建议您从简单的解决方案(不使用AJAX)开始,在熟悉它之后,下次尝试使用AJAX
也就是说
setState
,setStatus
)prepare()
方法中加载selectbox内容等信息,以便在出现错误时也可以使用这些信息@Getter
和@Setter
仅用于语法糖分(它们是Lombok注释,但为了清晰起见,您会继续使用Getter和Setter):
$(函数(){
$(“#事件,#公司”)。关于('change',function(){
$(“#我的表格”).submit();
});
});
...
...
...
...
表-在此处迭代**dataForBillsJspList**
...
public class RetrieveEvNaCoNaAction扩展了ActionSupport{
私有静态最终长serialVersionUID=-5418233715172672477L;
@Getter private List dataForBillsJspList=new ArrayList();
@Getter private List events=new ArrayList();
@Getter private List companies=new ArrayList();
@Getter@Setter私有字符串事件=null;
@Getter@Setter私有字符串company=null;
@凌驾
public void prepare()引发异常{
连接con;
试试{
con=新建数据库()。获取_连接();
//货运公司
function customFunction(selectedValue){
window.location="Action_URL?myValue="+selectedValue;
}
$("#eventName").change(function(e){
var selectedValue = $(this).val();
$.ajax({
type : 'post',
url : 'Action_URL',
data: { myValue: selectedValue},
success : function(data) {
alert(data);
console.log(data);
}
});
});