PF SetPropertyActionListener第一次中断

时间:2014-08-22 13:16:24

标签: ajax jsf primefaces actionlistener

我有一个让我疯狂的问题!我有一个组件,它呈现一个在页脚上有链接的面板。除了其他内容之外,此链接还包含我要显示的标题和HTML内容。这个想法基本上是当点击链接时,页面内容通过ajax更改,并显示链接的html内容(页脚保留在页面上)。 Debastging我注意到,第一次点击链接时内容确实会发生变化,但事实并非如此。复合组件中p.commandlinks的setPropertyActionListener在第一次执行后不再执行。我已经对项目进行了修改,这似乎是问题所在,但我无法弄清楚原因

我的复合组件的一部分。尝试在命令链接上设置onstart和oncomplete js函数,两者都被执行但actionListeners不是。

<cc:interface>
    <cc:attribute name="compId"/>
    <cc:attribute name="title"/>
    <cc:attribute name="bean"/>
    ...
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
    <p:panel id="#{cc.attrs.compId}" header="#{cc.attrs.title}" 
             widgetVar="#{cc.attrs.compId}"
             styleClass="#{cc.attrs.styleClass}">  
        <h:form>
            <p:dataList id="datalist-#{cc.attrs.compId}" value="#{cc.attrs.bean.currentList}"
                        type="definition" widgetVar="datalist-#{cc.attrs.compId}"
                        var="items" >

                <p:commandLink action="#{navBean.active}" update="@([id$=content])" styleClass="link"
                               value="#{items.descrInLang}" rendered="#{items.typeUrl eq 0}">
                    <f:setPropertyActionListener value="infoPage" target="#{navBean.selection}"/>
                    <f:setPropertyActionListener value="#{items.descrInLang}" target="#{infoPage.title}" /> 
                    <f:setPropertyActionListener value="#{items.HTMLContent}" target="#{infoPage.HTMLContent}"/> 
                </p:commandLink>
            </p:dataList>
        </h:form>
    </p:panel>
</cc:implementation>

导航Bean的一部分

public void active() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException {
        setAlbums(selection.equals("albums"));
        setBand(selection.equals("band"));
        setConcerts(selection.equals("concerts"));
        setContacts(selection.equals("contacts"));
        setHome(selection.equals("home"));
        setSiteMap(selection.equals("siteMap"));
        setInfoPage(selection.equals("infoPage"));
    }

public void setSelection(String selection) {
        this.selection = selection;
    }

public boolean isInfoPage() {
        return infoPage;
    }

    public void setInfoPage(boolean infoPage) {
        this.infoPage = infoPage;
    }

存储标题&amp;要显示的HTML内容。首次点击链接后,标题&amp;执行HTML内容,但是setter不是(在setPropertyActionListeners中声明)

@ManagedBean
@SessionScoped
public class InfoPage implements Serializable {

    private String title;
    private String HTMLContent;

    public InfoPage() {
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getHTMLContent() {
        return HTMLContent;
    }
    public void setHTMLContent(String HTMLContent) {
        this.HTMLContent = HTMLContent;
    }   
    }

模板的内容部分,指示应根据NavBean上的选定页面显示哪些内容。我将HTML内容和infoPage的标题作为参数传递

<h:head> 
    </h:head>    
    <h:body>
        <!-- the all containing file -->
        <ui:composition template="template.xhtml">
            <ui:define name="content">
                <h:panelGroup layout="block" id="content">
                    <h:panelGroup layout="block" rendered="#{navBean.home}">
                        <ui:include src="homecontent.xhtml"/>
                    </h:panelGroup>   
                     ....
                    <h:panelGroup layout="block" rendered="#{navBean.infoPage}">
                        <ui:include src="infoPage.xhtml">
                            <ui:param name="title" value="#{infoPage.title}"/>
                            <ui:param name="infoContent" value="#{infoPage.HTMLContent}"/>
                        </ui:include>
                    </h:panelGroup> 
                </h:panelGroup>
            </ui:define>
        </ui:composition>
    </h:body>

信息页。

<h:form id="infoPageForm">
    <p:panel id="infoPagePanel" header="#{title}">
        <h:panelGrid columns="1" cellpadding="10">
            <h:outputText escape="false" value="#{infoContent}" />
        </h:panelGrid>
    </p:panel>
</h:form> 

谢谢你的时间!

0 个答案:

没有答案