无法在操作Struts2中访问bean

时间:2014-09-07 10:36:15

标签: struts2

我有index.jsp,其中我有一个链接,点击该链接,该页面特定的操作被调用。现在点击此链接,我需要显示一个已填充多选列表的页面以及少量输入文本字段,在我填充TransactionBean的操作的构造函数中,它将与下一页上的字段绑定,即transactionData.jsp。

使用填充的多选列表正确显示transactionData.jsp页面。现在,用户可以从多选列表中选择值,并可以在文本字段中输入日期,然后单击单击按钮,以显示条形图。

单击Click按钮,我正在调用另一个ActionBean作为其属性的操作。在此操作的execute方法中,我尝试使用getter访问transactionbean,但它给了我NullPointerException。我知道,如果我们提交一个包含bean字段的页面,那么在调用action时,bean会通过拦截器自动实例化,但似乎这里的东西不正确。

的index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>

        <title>Hello World</title>
    </head>
    <body>
    <s:form action="displayAction.action">
        <h1>Hello World</h1>
        <a href="<s:url action="displayAction.action"/>">Transaction Chart</a>
    </s:form>
</body>
</html>

DisplayAction.java

package com.tutorialspoint.struts2;

import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;

public class DisplayAction extends ActionSupport {

    TransactionBean transactionBean;

    public TransactionBean getTransactionBean() {
        return transactionBean;
    }

    public void setTransactionBean(TransactionBean transactionBean) {
        this.transactionBean = transactionBean;
    }

    public String execute() {
        return SUCCESS;
    }

    public DisplayAction() {
        System.out.println("Inside Constructor");
        List<String> leftChannelsList = new ArrayList<String>();
        leftChannelsList.add("Channel1");
        leftChannelsList.add("Channel2");
                //TransactionBean transactionBean  = new TransactionBean();

        setTransactionBean(new TransactionBean());
        getTransactionBean().setLeftChannelsList(leftChannelsList);

        //Transaction Type Dta
        List<String> leftTransTypesList = new ArrayList<String>();
        leftTransTypesList.add("TransType1");
        leftTransTypesList.add("TransType2");
        getTransactionBean().setLeftTransTypesList(leftTransTypesList);

    }
}

transactionData.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <s:head theme="ajax" debug="true"/>
        <title>Hello World</title>
    </head>
<body bgcolor="grey">

<s:form action="displayChart.action">

    <s:datetimepicker label="Select From" name="transactionBean.fromDate" displayFormat="MM-dd-yy" required="true" />  <s:datetimepicker label="Select To" name="transactionBean.toDate" displayFormat="MM-dd-yy" required="true" />

    <s:optiontransferselect
        label="Channels"
        name="transactionBean.leftChannels"
        leftTitle="Unselected Channels"
        rightTitle="Selected Channels"
        list="transactionBean.leftChannelsList"
        multiple="true"
        headerKey="-1"
        doubleList="transactionBean.rightChannelsList"
        doubleName="transactionBean.rightChannels"
        doubleHeaderKey="-1"
        doubleHeaderValue="Please Select"/>

    <!-- Transaction Types -->

    <s:optiontransferselect

        label="transaction Types"
        name="transactionBean.leftTransTypes"
        leftTitle="Unselected Transaction Type"
        rightTitle="Selected Transaction Type"
        list="transactionBean.leftTransTypesList"
        multiple="true"
        headerKey="-1"
        doubleList="transactionBean.rightTransTypesList"
        doubleName="transactionBean.rightTransTypes"
        doubleHeaderKey="-1"
        doubleHeaderValue="Please Select"/>

    <s:submit value="click" align="center"/>
</s:form>
</body>
</html>

JfreeChartAction.java

public class JfreeChartAction extends ActionSupport {

    private JFreeChart chart;

    private TransactionBean transactionBean;
    private TransactionDao transactionDao;

    public TransactionDao getTransactionDao() {
        return transactionDao;
    }

    public void setTransactionDao(TransactionDao transactionDao) {
        this.transactionDao = transactionDao;
    }

    public TransactionBean getTransactionBean() {
        return transactionBean;
    }

    public void setTransactionBean(TransactionBean transactionBean) {
        this.transactionBean = transactionBean;
    }

    // This method will get called if we specify <param name="value">chart</param>
    public JFreeChart getChart() {
        return chart;
    }

    public void setChart(JFreeChart chart) {
        this.chart = chart;
    }

    public JfreeChartAction() {}

    public String execute() throws Exception {
        System.out.println("Inside Execute: Start");

        System.out.println("From date:" + getTransactionBean().getFromDate());
        System.out.println("From date:" + getTransactionBean().getToDate());
        System.out.println("leftChannelsList:" + getTransactionBean().getLeftChannelsList());
        System.out.println("Left Trans type List" + getTransactionBean().getLeftTransTypesList());

        DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
        dataSet.setValue(0, "01-04-2014", "Channel1");
        dataSet.setValue(15000, "01-04-2014", "Channel2");

        dataSet.setValue(9000, "01-05-2014", "Channel1");
        dataSet.setValue(1500, "01-05-2014", "Channel2");

        dataSet.setValue(10000, "01-06-2014", "Channel1");
        dataSet.setValue(8000, "01-06-2014", "Channel2");

        chart = ChartFactory.createBarChart(
                "Demo Bar Chart", //Chart title
                "Mobile Manufacturer", //Domain axis label
                "TRANSACTIONS", //Range axis label
                dataSet, //Chart Data
                PlotOrientation.VERTICAL, // orientation
                true, // include legend?
                true, // include tooltips?
                false // include URLs?
        );

        chart.setBorderVisible(true);
        System.out.println("Inside Execute: End");

        return SUCCESS;
    }
}

struts.xml中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

    <package name="default" namespace="/" extends="struts-default">
        <action name="displayAction"
                class="com.tutorialspoint.struts2.DisplayAction"
                method="execute">
            <result name="success">transactionsData.jsp</result>
        </action>
    </package>

    <package name="defaultJfreeChart" namespace="/" extends="jfreechart-default">
        <action name="displayChart"
                class="com.tutorialspoint.struts2.JfreeChartAction"
                method="execute">

            <result name="success" type="chart">
                <param name="value">chart</param>
                <param name="type">jpeg</param>
                <param name="width">600</param>
                <param name="height">400</param>
            </result>
        </action>
    </package>
</struts>

TransactionBean.java

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.jfree.chart.JFreeChart;

public class TransactionBean {

    private Date dateTime;
    private Integer volume;
    private String leftChannels;
    private String rightChannels;
    private String toDate;
    private String fromDate;
    private List<String> leftChannelsList;
    private List<String> rightChannelsList;

    //Transaction type data 
    private String leftTransTypes;
    private List<String> leftTransTypesList;
    private String rightTransTypes;
    private List<String> rightTransTypesList;



    public Date getDateTime() {
        return dateTime;
    }

    public void setDateTime(Date dateTime) {
        this.dateTime = dateTime;
    }

    public Integer getVolume() {
        return volume;
    }

    public void setVolume(Integer volume) {
        this.volume = volume;
    }

        public TransactionBean(){
        //System.out.println("Inside TransactionBean constructor");
        }

    public String getLeftTransTypes() {
        return leftTransTypes;
    }

    public void setLeftTransTypes(String leftTransTypes) {
        this.leftTransTypes = leftTransTypes;
    }

    public List<String> getLeftTransTypesList() {
        return leftTransTypesList;
    }

    public void setLeftTransTypesList(List<String> leftTransTypesList) {
        this.leftTransTypesList = leftTransTypesList;
    }

    public String getRightTransTypes() {
        return rightTransTypes;
    }

    public void setRightTransTypes(String rightTransTypes) {
        this.rightTransTypes = rightTransTypes;
    }

    public List<String> getRightTransTypesList() {
        return rightTransTypesList;
    }

    public void setRightTransTypesList(List<String> rightTransTypesList) {
        this.rightTransTypesList = rightTransTypesList;
    }


    public String getToDate() {
        return toDate;
    }

    public void setToDate(String toDate) {
        this.toDate = toDate;
    }

    public String getFromDate() {
        return fromDate;
    }

    public void setFromDate(String fromDate) {
        this.fromDate = fromDate;
    }

    public String getLeftChannels() {
        return leftChannels;
    }

    public void setLeftChannels(String leftChannels) {
        this.leftChannels = leftChannels;
    }

    public String getRightChannels() {
        return rightChannels;
    }

    public void setRightChannels(String rightChannels) {
        this.rightChannels = rightChannels;
    }

    public List<String> getRightChannelsList() {
        return rightChannelsList;
    }

    public void setRightChannelsList(List<String> rightChannelsList) {

        this.rightChannelsList = rightChannelsList;
    }

    public List<String> getLeftChannelsList() {
        return leftChannelsList;
    }

    public void setLeftChannelsList(List<String> leftChannelsList) {

        this.leftChannelsList = leftChannelsList;
    }

}

1 个答案:

答案 0 :(得分:0)

  你可以告诉我应该使用哪个版本。

始终使用最新版本。目前它是Struts 2.3.16.3 GA。您还可以看到Version NotesMigration Guide