Ich habe eine Streifenaktionsseite. Wenn die Seite geladen wird, möchte ich einen OriginalAssignee speichern, indem ich ihn einem Objekt zuweise (d. h. setOriginalAssignee (userAction.getAssignee())), so dass im Falle einer Änderung des Feld-Beauftragten des Objekts eine Berechnung durchgeführt wird. Hier ist meine Aktion Bohne:Verstecktes Feld wird Null, wenn es in Streifen actionbean
@UrlBinding("/action/view-details.page")
public class ActionListViewPage extends CustomAction {
.
.
.
private static final String ACTION_LIST_VIEW = "/action/view-details.jsp";
private static final String ACTION_HOME_PAGE="/action/dashboard.page";
private SecurityPerson originalAssignee;
private UserAction userAction;
public UserAction getUserAction() {
return userAction;
}
public void setUserAction(UserAction userAction) {
this.userAction = userAction;
}
public SecurityPerson getOriginalAssignee() {
return originalAssignee;
}
public void setOriginalAssignee(SecurityPerson originalAssignee) {
this.originalAssignee = originalAssignee;
}
@DefaultHandler
public Resolution showUserAction() {
if(userAction==null){
flash("error", "Can't find the the specified User action.");
return new RedirectResolution(ACTION_HOME_PAGE);
}
setOriginalAssignee(userAction.getAssignee());// This one works fine and assigns the the assignee to originalAssignee for future reference
return new ForwardResolution(ACTION_LIST_VIEW);
}
public Resolution saveUserAction() {
try {
if(!originalAssignee.equals(userAction.getAssignee())){
userAction.setStatusEnum(StatusEnum.RE_ASSIGNED);
userAction.setAssignedBy(getCurrentUser(getRequest()));
userAction.setAssignedTimestamp(new Date());
}
if (userAction.getStatusEnum() == null) {
userAction.setStatusEnum(FinAidActionStatusEnum.UNASSIGNED);
}
userAction.save();
flash("ok", "User Action change has been saved to the database. ");
}
catch (Exception e) {
flash("error", "Error saving UserAction./n " + e.getMessage());
}
return new RedirectResolution(ACTION_HOME_PAGE);
}
}
Teil der Ansicht-details.jsp Seite sieht wie folgt aus
<stripes:form beanclass="${actionBean.class}" name="actionListForm" id="actionListForm" method="POST"
action="view-details.page?saveUserAction=1"
style="padding-left:20px;">
**<stripes:hidden name="originalAssignee"/>**
<tr>
<td align="left"> Assign to:</td>
<td align="right">
<stripes:select name="userAction.assignee" value="${actionBean.userAction.assignee}"
onchange="$('actionListForm').submit();">
<stripes:option value=""> </stripes:option>
<stripes:options-collection collection="${actionBean.assigneeList}"
label="person.name"/>
</stripes:select>
</td>
</br> </br>
</tr>
<tr>
<td>
Status:
</td>
<td>
<stripes:select name="userAction.statusEnum" onchange="$('actionListForm').submit();"
value="${actionBean.userAction.statusEnum}">
<stripes:option value=""> </stripes:option>
<stripes:options-enumeration enum="uiowa.maui.biz.finaid.enums.FinAidActionStatusEnum"/>
</stripes:select>
</td>
</tr>
<stripes:hidden name="userAction"/>
</stripes:form>
Wie Sie aus meinem Code sehen kann ich versteckte Variable verwendet originalAssignee zu halten ... aber Wenn die saveUserAction-Methode aufgerufen wird, wird der OriginalAssignee als null angegeben. Ich sollte den Grund nicht herausfinden. Gibt es eine Änderung, die ich an der Forward- oder Redirect-Auflösung vornehmen sollte?
FYI: userAction ist ein permanentes Ruhezustandsobjekt. Danke. Diese
Haben Sie überprüft, dass das ausgeblendete Feld ordnungsgemäß in dem Formular festgelegt wird? Entweder die Quelle betrachten oder sie in ein Textfeld umwandeln? – clmarquart
Das ist, was ich habe, wenn ich die Quelle sehe Allerdings, wenn ich "value =" $ {actionBean.originalAssignee} "" zu den versteckten var .. und es hat gut funktioniert. Ich weiß nicht, warum der ursprüngliche Code nicht funktioniert, aber zumindest jetzt hat es das Problem gelöst. – WowBow