【问题标题】:ModelDriven Interface to get the values on success.jsp pageModelDriven 接口获取 success.jsp 页面上的值
【发布时间】:2013-02-09 00:37:44
【问题描述】:

我在我的 struts 2 应用程序中编写了代码,一切正常,但我没有在 succecc.jsp 页面获得属性。请告诉我我在哪里犯错...

我的动作类是

package action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import dao.Empdao;
import model.Empmodel;
public class Empaction extends ActionSupport implements ModelDriven<Object>,SessionAware{

private static final long serialVersionUID = 1L;
    Empmodel modelobj;
    Map<String, Object> map;
    public String execute() throws Exception{
        map.put("a", modelobj.getFirstname());
        Empdao empdao = new Empdao();
        int queryResult = empdao.registration(modelobj);
        if (queryResult==0)
        {   
          addActionError("it is a dublicate entry please enter anothe id");
              return ERROR;
        }   
        else{   
         return SUCCESS;    
         }
}

    @Override
    public Object getModel() {
    modelobj = new Empmodel();
    return null;
    }

    @Override
    public void setSession(Map<String, Object> map) {
        // TODO Auto-generated method stub
        this.map =map;
    }

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
       "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
       "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devmode" value="true" />
<package name="loginmodel" extends="struts-default">
    <action name="emplogin" class="action.Empaction">
        <result name="input">/Registration/empregistration.jsp</result>
        <result name="success">/Registration/success.jsp</result>
        <result name="error">/Registration/empregistration.jsp</result>
    </action>
</package>
</struts>

success.jsp 是

<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    Registration successful
    <s:property value="#session.a" />
</body>
</html>

Empmodel 类

package model;

public class Empmodel {
private String firstname;
private String lastname;
private String id;
private String gender;
private String dob;
private String maritalstatus;
private String email;
private String joiningdate;
private String designation;
private String address;
private String country;
private String state;
private String city;
private int  pincode;
private long mobileno;
private String groups;
public String getFirstname() {
    return firstname;
}
public void setFirstname(String firstname) {
    this.firstname = firstname;
}
public String getLastname() {
    return lastname;
}
public void setLastname(String lastname) {
    this.lastname = lastname;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
public String getDob() {
    return dob;
}
public void setDob(String dob) {
    this.dob = dob;
}
public String getMaritalstatus() {
    return maritalstatus;
}
public void setMaritalstatus(String maritalstatus) {
    this.maritalstatus = maritalstatus;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getJoiningdate() {
    return joiningdate;
}
public void setJoiningdate(String joiningdate) {
    this.joiningdate = joiningdate;
}
public String getDesignation() {
    return designation;
}
public void setDesignation(String designation) {
    this.designation = designation;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
public String getCountry() {
    return country;
}
public void setCountry(String country) {
    this.country = country;
}
public String getState() {
    return state;
}
public void setState(String state) {
    this.state = state;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}


public long getMobileno() {
    return mobileno;
}
public void setMobileno(long mobileno) {
    this.mobileno = mobileno;
}
public String getGroups() {
    return groups;
}
public void setGroups(String groups) {
    this.groups = groups;
}
public int getPincode() {
    return pincode;
}
public void setPincode(int pincode) {
    this.pincode = pincode;
}

}

【问题讨论】:

  • 你的Action 有点让人哭笑不得。您有一个返回 nullModelDriver&lt;Object&gt; 的 getter,而不是您的模型的特定类。
  • 您能发布您的Empmodel 对象吗?FirstName 来自哪里?我没有看到它在任何地方被初始化。
  • 你有没有打电话给setFirstName()?否则firstName 就是null
  • 我正在使用我的“DAO”类向数据库插入值,该类工作正常,但在成功页面上没有得到输出,你能解释一下吗?

标签: java jakarta-ee web-applications struts2 struts


【解决方案1】:

首先你需要纠正你的行为,使用ModelDriven的想法是你将你的模型推入堆栈,你正在推null
你也可以去掉SessionAware,如果你只使用它的话。

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {

    private static final long serialVersionUID = 1L;
    Empmodel modelobj = new Empmodel();

    public String execute() throws Exception {

        Empdao empdao = new Empdao();

        int queryResult = empdao.registration(modelobj);

        if (queryResult == 0) {
            addActionError("it is a dublicate entry please enter anothe id");
            return ERROR;
        } else {

            return SUCCESS;
        }
    }

    @Override
    public Empmodel getModel() {
        return modelobj;
    }
}

现在您的Empmodel 位于ValueStack 的顶部,所以这将起作用:

<s:property value="%{firstName}"/>

确保ModelDrivenInterceptor 在您的拦截器堆栈中。

【讨论】:

    【解决方案2】:

    为什么要使用 session,如果你可以使用 valuestack 来实现,那么你有很多方法可以实现这一点

    使用 ognl

    <s:property value="modelobj.firstname "/>
    

    使用脚本

    <%
    String fName=(String)session.getAtribute("a");
    
    %>
    

    【讨论】:

    • 请注意,他的getModel 正在返回null - 他没有将任何东西推到ValueStack 上。此外,OGNL 解决方案忽略了ModelDriven 的全部意义。
    • 我知道。但我想购买 SessionAware
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多