我正在使用JSF 2和primefaces 2.1.3与tomcat。我试图以下列方式访问转换器类中的会话作用域托管bean。
MemberConverter{
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
throws ConverterException {
MemberBean memberBean = (MemberBean)((HttpSession)arg0.getExternalContext().getSession(true)).getAttribute("memberBean");
}
}
该方法在ajax调用中由p:picklist调用,但问题是在ajax请求中memberbean为null。如果在简单的http请求期间调用,则memberbean不为null。如果在ajax请求中调用memberbean,我怎样才能确保memberbean不为null。
<p:dialog header="Member Contacts" widgetVar="dialog_memberContacts" resizable="false"
showEffect="bounce" hideEffect="explode" modal="true" position="center" appendToBody="true">
<h:form id="form_compose_2">
<h:panelGrid columns="1">
<p:selectOneMenu id="dropdown_groups" value="#{groupBean.selectionGroup}" converter="groupConverter"
style="size:200px;">
<f:selectItem itemLabel="Select Group" itemValue="#{null}" noSelectionOption="true" />
<f:selectItems value="#{groupBean.groups}" var="group" itemLabel="#{group.gname}" itemValue="#{group}"/>
<p:ajax process=":form_compose_2:list_members" update=":form_compose_2" listener="#{groupBean.handleGroupChange}" />
</p:selectOneMenu>
<p:pickList id="list_members" value="#{membershipBean.membersList}" var="member"
iconOnly="true" itemLabel="#{member.fname} #{member.lname}" style="width:450px;"
itemValue="#{member}" converter="memberConverter">
<f:facet name="sourceCaption">Available</f:facet>
<f:facet name="targetCaption">Selected</f:facet>
</p:pickList>
<p:commandButton value="Ok" action="#{groupBean.updateMemberState}" oncomplete="dialog_memberContacts.hide()"
update=":form_compose:input_group" style="float:right;"/>
</h:panelGrid>
</h:form>
</p:dialog>
是否与对话框有关。此页面上有两种形式。你可以看到一个在对话框内。另一种形式是form_compose
答案 0 :(得分:1)
我认为您应该使用HttpSession
和Converter
注释@MangagedBean
并注入@RequestScope
bean,而不是尝试从@SessionScoped
获取它@ManagedProperty
。它会是这样的:
@ManagedBean
@RequestScoped
public class MemberConverter extends Converter {
@ManagedProperty(value="#{memberBean}")
private MemberBean memberBean;
...
// Getters and Setters
}