无法访问 Struts2 中的 bean [英] Could not access bean in action Struts2

查看:30
本文介绍了无法访问 Struts2 中的 bean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have index.jsp where I have one link,on clicking on that link that page specific action gets called.Now as on the click of this link,I need to display a page with already populated multiselect list along with few input text fields,in the constructor of the action I populated the TransactionBean which will be bound with fields on next page i.e transactionData.jsp.

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

The transactionData.jsp page is getting displayed correctly with populated multiselected list.Now user can select values from multiselect list and can enter dates in text field and will click on click button,so that a bar chart is displayed.

单击单击"按钮时,我正在调用另一个操作,该操作也将 TransactionBean 作为其属性.在此操作的执行方法中,我尝试使用其 getter 访问 transactionbean,但它给了我 NullPointerException.我知道,如果我们提交的页面绑定了 bean 的字段,那么在调用 action 时,bean 将通过拦截器自动实例化,但这里似乎有些不正确.

On click on Click button ,I am calling another action ,which also has TransactionBean as its property.In the execute method of this action, I am trying to access transactionbean with its getter but it gives me NullPointerException. I got to know that, if we are submitting a page which has fields of bean binded ,then on calling action,bean will be instantiated automatically through interceptors but seems like something is not correct here.

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

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

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

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

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;
    }

}

推荐答案

你能告诉我应该使用哪个版本.

can you please let me know which version should be used.

始终使用最新版本.目前是 Struts 2.3.16.3 GA.您还可以查看版本说明迁移指南.

Always use the latest version. At the moment it's Struts 2.3.16.3 GA. You can also see Version Notes and Migration Guide.

这篇关于无法访问 Struts2 中的 bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆