在 PrimeFaces 中调整布局单元大小时处理调整大小事件



我正在做我的第一个Web项目,并为它使用PrimeFaces组件套件。

我想在调整中心布局单元的大小时触发调整大小事件。我已经尝试了代码,但从未调用 bean 类中的方法。

在这里做错了什么?如果我错了,请纠正我?

    <p:layout fullPage="true" resizeListner="#{resizeBean.handleResize}">
        <p:layoutUnit id="top" position="north" resizable="true" size="20%">
            <ui:insert name="header">
                <ui:include src="Header.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="bottom" styleClass="class-bottom" position="south"
            resizable="true" size="25%">
            <ui:insert name="footer">
                <ui:include src="Footer.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="left" styleClass="class-left" position="west"
            resizable="true" size="24%">
            <ui:insert name="tree">
                <ui:include src="Tree.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="addDlg" position="center">
            <ui:insert>
                <ui:include src="AddDevice.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="center" position="center">
            <ui:insert name="centerPage">
                <ui:include src="Center.xhtml" />
            </ui:insert>
        </p:layoutUnit>
    </p:layout>    

这是 bean 类的代码

@ManagedBean(name = "resize")    
public class ResizeBean implements Serializable {    
        private long width;    
        private long height;    
public void handleResize(ResizeEvent event) {    
width = event.getWidth();    
height = event.getWidth();    
System.out.println("in resize");
    }    
    public long getWidth() {
        return this.width;
    }
    public long getHeight() {
        return this.height;
    }    
}

好吧,我不知道你正在使用的PrimeFaces的女巫版本,但是在de PrimeFaces手册中找不到属性resizeListener。此外,您还为您的 bean 命名了 name 属性:

@ManagedBean(name = "resize")

因此,如果您想在视图中使用它,请像这样引用您的名字:

#{resize.handleResize}

如果您不使用 name 属性,则可以参考调整大小 Bean。更多信息可以在这里找到:http://docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html

要获取 resize 事件,请在视图中添加一个 <p:ajax> 标记,如下所示:

<p:ajax event="resize" listener="#{resize.handleResize}" />

现在在您的布局周围添加 <h:form> 标签,一切都应该可以正常工作。

完整视图:

<h:form>
    <p:layout fullPage="true">
        <p:ajax event="resize" listener="#{resize.handleResize}" />
        <p:layoutUnit id="top" position="north" resizable="true" size="20%">
            <ui:insert name="header">
                <ui:include src="Header.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="bottom" styleClass="class-bottom" position="south"
            resizable="true" size="25%">
            <ui:insert name="footer">
                <ui:include src="Footer.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="left" styleClass="class-left" position="west"
            resizable="true" size="24%">
            <ui:insert name="tree">
                <ui:include src="Tree.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="addDlg" position="center">
            <ui:insert>
                <ui:include src="AddDevice.xhtml" />
            </ui:insert>
        </p:layoutUnit>
        <p:layoutUnit id="center" position="center">
            <ui:insert name="centerPage">
                <ui:include src="Center.xhtml" />
            </ui:insert>
        </p:layoutUnit>
    </p:layout>    
<h:/form>

最新更新