Управляемый компонент Session Scoped является нулевым в запросе ajax - PullRequest
0 голосов
/ 12 марта 2012

Я использую JSF 2 и простые лица 2.1.3 с tomcat. Я пытаюсь получить доступ к управляемому сессионному компоненту в классе преобразователя следующим образом.

MemberConverter{
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
                throws ConverterException {
    MemberBean memberBean = (MemberBean)((HttpSession)arg0.getExternalContext().getSession(true)).getAttribute("memberBean");
    }
}

Метод вызывается p: picklist при вызове ajax, но проблема в том, что член-член является нулевым в запросе ajax. Член-член не равен нулю, если он вызывается во время простого http-запроса. Как я могу убедиться, что memberbean не является нулевым, если он вызывается в запросе ajax.

РЕДАКТИРОВАТЬ НИЖЕ

<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

1 Ответ

1 голос
/ 12 марта 2012

Вместо того, чтобы пытаться получить его от HttpSession, я думаю, что вы должны аннотировать свои Converter с помощью @MangagedBean и @RequestScope и вводить свой бин @SessionScoped с помощью @ManagedProperty. Было бы что-то вроде этого:

@ManagedBean
@RequestScoped
public class MemberConverter extends Converter {
    @ManagedProperty(value="#{memberBean}")
    private MemberBean memberBean;

    ...
    // Getters and Setters
}
...