【发布时间】:2016-08-18 02:59:47
【问题描述】:
我想让预订/删除预订产品页面成为可能。 预订还可以,不幸的是不能删除...
@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>
当我删除 rendered="#{request.remoteUser eq wardrobeDetailsBean.selectedWardrobe.reservingUserId.username}" 时,它可以工作。
当点击预订时,它应该只是可见的移除按钮。 有什么问题,它不起作用?记录我没有的任何错误。
我点击“预订”。商品已预约,按钮将被调换。
我点击“取消保留”仍然没有调用该方法,我丢失了有关产品的信息(刷新页面返回有关产品的信息,但产品仍然保留)
【问题讨论】:
-
是 JSF 2 还是 JSF 1?
-
Mojtaba。它是 JSF 2。
-
如果让它返回 String 而不是 void 方法呢?
-
请描述发生了什么?是否调用了 unreserve 方法?还是只是你的渲染有问题?
-
同样不行
标签: jsf