Java 实施<;sj:选择/>;在Struts2中

Java 实施<;sj:选择/>;在Struts2中,java,jsp,struts2,struts2-jquery,struts2-jquery-plugin,Java,Jsp,Struts2,Struts2 Jquery,Struts2 Jquery Plugin,我目前正在处理一个项目,我的应用程序中有多个选择框,每个值都应根据第一个列表中选择的前一个值进行更改,这是我的代码,我没有得到第二个选择列表 这是我的jsp 选择建筑: 区块: 这是我的struts.xml 这是我的java操作类,用于第二个选定列表 package hart.hospitalManagement; import hart.bean.HospitalFloor; import hart.profilemanagement.DoctorRegistrationHelper

我目前正在处理一个项目,我的应用程序中有多个选择框,每个值都应根据第一个列表中选择的前一个值进行更改,这是我的代码,我没有得到第二个选择列表

这是我的jsp


选择建筑:
区块:
这是我的struts.xml


这是我的java操作类,用于第二个选定列表

package hart.hospitalManagement;

import hart.bean.HospitalFloor;
import hart.profilemanagement.DoctorRegistrationHelper;

import java.util.Map;

import com.opensymphony.xwork2.ActionSupport;

public class HospitalBlockListForFloorAction extends ActionSupport {

    private Map<String, String> block;
    private String buildingName;
    private HospitalFloor hospitalfloor;

    public Map<String, String> getBlock() {
        return block;
    }
    public void setBlock(Map<String, String> block) {
        this.block = block;
    }
    public String getBuildingName() {
        return buildingName;
    }
    public void setBuildingName(String buildingName) {
        this.buildingName = buildingName;
    }       

    public String setBlockListForFloor()
    {    
        HospitalFloorManagementHelper hospitalFloorManagementHelper=new HospitalFloorManagementHelper();
        block=hospitalFloorManagementHelper.getBlockListForFloor(buildingName);
        System.out.println("building Name are"+buildingName);
        System.out.println("block list are"+block);
        return SUCCESS;
    }
    public String getJSON()
    {
        return setBlockListForFloor();
    }    
}

但我无法获得第二个选定列表,请有人可以帮助我吗?我是struts2的新手。

您的代码非常混乱。请记住:

  • 每个私有属性都需要一个Getter和Setter(在某些情况下可以避免它们,但除非您确切知道自己在做什么,否则始终生成它们);具体来说,bean中的
    block
    和操作中的
    hospitalfloor
    都缺少它们
  • 我看不到您的
    bean
    属性在任何地方定义,而在JSP页面中您多次引用它(
    bean.state
    bean.country
    等)
  • 如果您需要发布某些内容(并且由于您要发布select1中的值以填充select2,因此您需要它),您必须将元素放入表单中。在
    的特定情况下,不要在表单本身中放置
    操作
    属性,因为您已经从
    href
    属性指定了操作url:

    
    
  • 您的主题没有在任何地方定义
  • 您的第二个select主题递归地通知第一个select。这是错误的
  • 流程应为:

    
    
    public Map<String, String> getBlockListForFloor(String buildingName)
    {
        int buildingId=0;
        Map<String, String> block=new HashMap<>();
        DbConnect db=new DbConnect();
        Connection con=db.returnConnection();
    
        try
        {
            Statement stmt1=con.createStatement();
            Statement stmt2=con.createStatement();
            ResultSet rs1=stmt1.executeQuery("select buildingId from hospital_building where buildingName='"+buildingName+"'");
            while(rs1.next())
            {
                buildingId=rs1.getInt("buildingId");
    
            }
            ResultSet rs2=stmt2.executeQuery("select blockName from hospital_block where buildingId='"+buildingId+"'");
            while(rs2.next())
            {
                block.put(rs1.getString("blockName"), rs1.getString("blockName"));
            }               
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            db.closeConnection(con);
        }
    
        return block;
    }
    }
    
    private String buildingName;
    private String block;
    
    public String getBuildingName() {
        return buildingName;
    }
    public void setBuildingName(String buildingName) {
        this.buildingName = buildingName;
    }