Ich wollte die Möglichkeit der Buchung/entfernen Buchung der Produktseite machen. Reservierung ist ok, das Entfernen leider nicht ...Aufruf Methoden in JSF
@ManagedBean(name = "wardrobeDetailsBean")
@SessionScoped
//@RequestScoped
public class WardrobeDetailsBean implements Serializable {
@Inject
WardrobeService wardrobeService;
@Inject
AuthBean authBean;
// other fields + setters, getters
@ManagedProperty("#{param.id}")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsernameReserving() {
this.selectedWardrobe = wardrobeService.getWardrobeById(id);
String usernameById = selectedWardrobe.getReservingUserId().getUsername();
StringBuilder sb = new StringBuilder();
sb.append(usernameById.substring(0, 2));
sb.append("...");
sb.append(usernameById.substring(usernameById.length() - 2, usernameById.length()));
return sb.toString();
}
@PostConstruct
public void init() {
if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
dbImage1 = new DefaultStreamedContent();
} else if (id != null) {
this.selectedWardrobe = wardrobeService.getWardrobeById(id);
}
}
}
public String reserve() {
this.selectedWardrobe = wardrobeService.getWardrobeById(id);
if (authBean.getUser() != null && authBean.getUser().getId() != null) {
selectedWardrobe.setReservingUserId(authBean.getUser());
wardrobeService.reserveProduct(selectedWardrobe);
return null;
} else {
return "/login.xhtml?faces-redirect=true";
}
}
public void unreserve() {
this.selectedWardrobe = wardrobeService.getWardrobeById(id);
selectedWardrobe.setReservingUserId(null);
wardrobeService.reserveProduct(selectedWardrobe);
}
}
productView.xhtml
<h:commandButton id="reserve" styleClass="btn-u btn-u-sea-shop btn-u-lg" rendered="#{wardrobeDetailsBean.selectedWardrobe.reservingUserId eq null}"
value="Reserve" action="#{wardrobeDetailsBean.reserve()}">
<f:ajax execute="@form" render="reservePanel"/>
</h:commandButton>
<h:outputText value="This product has been reserved by #{wardrobeDetailsBean.usernameReserving}" rendered="#{wardrobeDetailsBean.selectedWardrobe.reservingUserId ne null}"/>
<br />
<input type="hidden" name="remoteUser" value="#{request.remoteUser}"/>
// added using guidance from the answers
<h:commandButton id="unreserve" styleClass="btn-u btn-u-red btn-u-lg" rendered="#{request.remoteUser eq wardrobeDetailsBean.selectedWardrobe.reservingUserId.username}"
value="Unreserve" action="#{wardrobeDetailsBean.unreserve()}">
<f:ajax execute="@form" render="reservePanel"/>
</h:commandButton>
Wenn ich die rendered="#{request.remoteUser eq wardrobeDetailsBean.selectedWardrobe.reservingUserId.username}"
entfernt, es funktioniert.
Wenn auf die Reservierung geklickt wird, sollte nur die Schaltfläche zum Entfernen sichtbar sein. Was ist falsch, es funktioniert nicht? Das Protokoll irgendwelche Fehler habe ich nicht.
Nach der Verwendung der Anleitung aus den Antworten funktioniert die Anwendung so.
Ich klicke auf "Reservieren". Das Produkt wurde reserviert, der Button wird getauscht.
ich auf „Reservierung aufheben“ und immer noch die Methode nicht aufgerufen wird, verliere ich die Informationen über das Produkt (aktualisieren Sie die Seite Informationen über das Produkt zurückgibt, aber das Produkt ist reserviert noch)
Ist es JSF 2 oder JSF 1? –
Mojtaba. Es ist JSF 2. – user3128303
Was ist, wenn Sie es String anstelle von Void-Methode zurückgeben? –