我正在创建一个在视图和编辑模式中应用的portlet。我想要一种情况,并且更新将portlet从编辑模式切换到视图模式。以下是我的代码段
@ManagedBean(name = "portletBackingBean")
@ViewScoped
public class FirstPortlet extends GenericFacesPortlet implements Serializable {
private transient Logger logger = LoggerFactory.getLogger(getClass());
private void doActionResponse(PortletMode mode){
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext =
facesContext.getExternalContext();
ActionResponse actionresponce = (ActionResponse) externalContext.getResponse();
try {
actionresponce.setPortletMode(mode);
} catch (PortletModeException e) {
// TODO Auto-generated catch block
LiferayFacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Error setting property"));
}
}
private String userName;
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
//submitting the values
public void doSubmit(){
if(this.userName != null) {
logger.debug("value of property in backing bean set to " + getUserName());
doActionResponse(PortletMode.VIEW);
}
}
到目前为止一切顺利,但随后portlet在查看模式下呈现,#{portletBackingBean.userName}
的值为null。
请有更优雅的方式来做到这一点
提前致谢
答案 0 :(得分:3)
此代码存在一些严重缺陷。
@ManagedBean(name = "portletBackingBean")
@ViewScoped
public class FirstPortlet extends GenericFacesPortlet implements Serializable {
//...
private String userName;
portlet ......
userName
)每当解析portletBackingBean
时,它将导致JSF框架创建FirstPortlet
类的新实例。它不会返回对包含它的portlet实例的引用。
此外,如果您对编辑和视图portlet模式使用不同的视图@ViewScoped
不适合此状态。
简而言之,我认为您需要再次查看模型设计,并弄清楚如何将状态与portlet功能分开。