You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by VipKumar <ch...@gmail.com> on 2009/11/30 10:33:45 UTC
Struts WorkFlow object created in first request becoming null
Hi All,
I am new to struts and creating a struts application having workflow. for
this workflow I am using the below code in the struts2.xml
<package name="enterEvent" namespace="/event" extends="base-package">
<interceptors>
<interceptor name="flash"
class="com.opensymphony.webwork.interceptor.FlashInterceptor" />
<interceptor-stack name="eventStack">
<interceptor-ref name="scope">
model
partialEvent
</interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="eventStack" />
<action name="addEventFlow"
class="com.fdar.apress.s2.actions.event.BaseEventAction">
<interceptor-ref name="eventStack">
start
</interceptor-ref>
<result>/WEB-INF/jsp/event/enterEventDetails-input.jsp</result>
</action>
<action name="completeEvent"
class="com.fdar.apress.s2.actions.event.BaseEventAction">
<interceptor-ref name="eventStack">
end
</interceptor-ref>
<result>/WEB-INF/jsp/event/eventReview.jsp</result>
</action>
<action name="flashedSelectEventType"
class="com.fdar.apress.s2.actions.event.SelectLocationTypeAction">
<interceptor-ref name="flash">
Retrieve
</interceptor-ref>
<interceptor-ref name="eventStack" />
<result>/WEB-INF/jsp/event/selectLocationType-input.jsp</result>
</action>
</package>
------------------------------------
BaseEventAction is a kind of dummy action
package com.fdar.apress.s2.actions.event;
import com.fdar.apress.s2.domain.Event;
import com.fdar.apress.s2.actions.BaseAction;
import com.opensymphony.xwork2.ModelDriven;
public class BaseEventAction extends BaseAction implements
ModelDriven<Event> {
protected Event event = null;
public Event getModel() {
return event;
}
public void setModel(Event model) {
this.event = model;
}
}
=================================================
Now in the enterEventDetails-input.jsp I am creating a event and then moving
forword for selection of the location.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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><s:text name="createEvent.enterEvent.title"/></title>
</head>
<body>
<s:form action="enterEventDetails" namespace="/event" method="post">
<s:textfield key="event.name" name="name"></s:textfield>
<s:textfield key="event.startDate" name="partialStartDate"></s:textfield>
<s:textfield key="event.startTime" name="partialStartTime"></s:textfield>
<s:textfield key="event.timeZoneOffset"
name="timeZoneOffset"></s:textfield>
<s:textfield key="event.votingStartTime"
name="partialVotingStartTime"></s:textfield>
<s:textfield key="event.duration" name="duration"></s:textfield>
<s:submit key="button.create"/>
</s:form>
</body>
</html>
=================================================
package com.fdar.apress.s2.actions.event;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.Validation;
import com.opensymphony.xwork2.validator.annotations.VisitorFieldValidator;
import com.fdar.apress.s2.actions.user.DebuggingFile;
import com.fdar.apress.s2.domain.Event;
import com.fdar.apress.s2.domain.Progress;
import com.fdar.apress.s2.util.TimeUtil;
import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import org.apache.struts2.config.ParentPackage;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletActionRedirectResult;
@ParentPackage("enterEvent")
@Results (value={
@Result(type= ServletActionRedirectResult.class,
value="selectLocation",params={"method","input"}),
@Result(type= ServletActionRedirectResult.class,
name="selectType",value="/event/flashedSelectEventType.action")
})
@Validation
public class EnterEventDetailsAction extends BaseEventAction implements
Preparable {
private Date partialStartDate;
private String partialStartTime;
private String partialVotingStartTime;
public void prepare() throws Exception {
DebuggingFile debugFile = new DebuggingFile();
debugFile.writeToDebugFile("CLASS::EnterEventDetailsAction
METHOD::prepare Begin");
event = new Event();
event.setStatus(Progress.NOT_STARTED);
event.setLastUpdateTime( Calendar.getInstance().getTime() );
}
public Date getPartialStartDate() {
return partialStartDate;
}
@RequiredFieldValidator(message="Validation Error",
key="validate.notEmpty")
public void setPartialStartDate(Date partialStartDate) {
this.partialStartDate = partialStartDate;
}
public String getPartialStartTime() {
return partialStartTime;
}
@CustomValidator(type ="timeValidator", key="validate.timeOfDay")
public void setPartialStartTime(String partialStartTime) {
this.partialStartTime = partialStartTime;
}
public String getPartialVotingStartTime() {
return partialVotingStartTime;
}
@CustomValidator(type ="timeValidator", key="validate.timeOfDay")
public void setPartialVotingStartTime(String partialVotingStartTime) {
this.partialVotingStartTime = partialVotingStartTime;
}
@VisitorFieldValidator(message="Default message", fieldName="model",
shortCircuit=false, appendPrefix=false)
public String execute() throws Exception {
Calendar cal = Calendar.getInstance();
cal.setTime(partialStartDate);
TimeUtil timeUtil = new TimeUtil(partialStartTime);
event.setStartTime( timeUtil.resolveDate( partialStartDate,
event.getTimeZoneOffset() ) );
cal = Calendar.getInstance();
cal.setTime(partialStartDate);
timeUtil = new TimeUtil(partialVotingStartTime);
event.setVotingStartTime( timeUtil.resolveDate( partialStartDate,
event.getTimeZoneOffset() ) );
return SUCCESS;
}
}
============================================
Then its redirecting me to select a location and after choosing the location
I am using the class to add event to location
package com.fdar.apress.s2.actions.event;
import org.apache.struts2.dispatcher.ServletActionRedirectResult;
import org.apache.struts2.config.ParentPackage;
import org.apache.struts2.config.Result;
import com.fdar.apress.s2.services.LocationService;
import com.fdar.apress.s2.actions.user.DebuggingFile;
import com.fdar.apress.s2.domain.Location;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.Validation;
import java.util.List;
@ParentPackage("enterEvent")
@Result(type= ServletActionRedirectResult.class,value="selectContestants")
@Validation
public class SelectLocationAction extends BaseEventAction implements
Preparable {
private List<Location> locations;
private Long selectedLocation = null;
private LocationService service;
public void setLocationService(LocationService service) {
this.service = service;
}
public void prepare() throws Exception {
locations = service.findAll();
}
public List<Location> getLocations() {
return locations;
}
public Long getSelectedLocation() {
return selectedLocation;
}
@RequiredFieldValidator(message = "Default message", key =
"validation.selectLocation")
public void setSelectedLocation(Long selectedLocation) {
this.selectedLocation = selectedLocation;
}
public String input() {
return INPUT;
}
public String execute() throws Exception {
event.setLocation(service.findById(selectedLocation));
return SUCCESS;
}
}
===========================
Now I am getting the issue that the event object is coming null during the
second action. I mean giving a null pointer exception on the line
>> event.setLocation(service.findById(selectedLocation));
As I understand the problem is I am not able to preserve the session object
in the session object.
Please help.
Thanks
Vipin
--
View this message in context: http://old.nabble.com/Struts-WorkFlow-object-created-in-first-request-becoming-null-tp26571682p26571682.html
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org