【问题标题】:two action method in an action class using the same stack in liferay struts2 [duplicate]动作类中的两个动作方法在liferay struts2中使用相同的堆栈[重复]
【发布时间】:2015-08-15 14:32:12
【问题描述】:

我在 Struts2 中使用 liferay,我在一个动作类中有两个动作方法,我从第一个动作方法(execute())中的一个类创建一个对象,并将其传递给视图并在视图中成功显示。 jsp 我正在使用该对象,但是当我提交表单并转到第二个操作方法(sendMessage())时发生了异常。

我该怎么办?有什么问题?

struts.xml

<struts>
    <constant name="struts.devMode" value="true" />

    <package namespace="/support" extends="struts-portlet-default,json-default"
        name="subjectview">


        <action name="index" class="com.xxx.actions.SupportFormAction"
            method="execute">
            <result>/html/support/view.jsp</result>
        </action>

        <action name="sendmsg" class="com.xxx.actions.SupportFormAction"
            method="sendMessage">
            <result name="success">/html/support/send-message-success-ajax.jsp</result>
            <result name="error">/html/support/send-message-fail-ajax.jsp</result>
        </action>


    </package>
</struts>

SupportFormAction.java

package com.xxx.actions;

import com.iknito.model.SendEmail;
import com.opensymphony.xwork2.ActionSupport;

public class SupportFormAction extends ActionSupport {
private SendEmail sendEmail;

    @Override
    public String execute() throws Exception {
        sendEmail = new SendEmail();
        return "success";
    }

    public String sendMessage(){
        try{
            System.out.println(sendEmail.getName()); /* nullpointer exception happened here*/
            return "success";
        }
        catch(Exception ex){
            ex.printStackTrace();
            return "error";
        }
    }

public SendEmail getSendEmail() {
        return sendEmail;
    }

    public void setSendEmail(SendEmail sendEmail) {
        this.sendEmail = sendEmail;
    }
}

SendEmail.java

package iknito.com.actions;

public class SendEmail {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

view.jsp

<%@ include file="/html/init.jsp" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form id="form1" action="addsubjects" theme="simple">
<label for="name">Name:</label>
                        <s:textfield  type="text" name="sendEmail.name" placeholder="Hamed Yousefi" required="required"/>
                    <s:submit value="enter name"/>
</s:form>

【问题讨论】:

    标签: java jsp struts2 liferay struts2-interceptors


    【解决方案1】:

    您的对象在 JSP 页面上呈现后丢失。

    你需要

    • 将其放入页面中,例如隐藏输入,然后完全重新传输(在您的情况下,对象的每个属性都有一个隐藏参数)
    • 或者(当有一个完整的对象而不是一个简单的字符串时会更好)将它放入会话中,然后再检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2020-11-24
      • 2022-01-02
      相关资源
      最近更新 更多