从主菜单导航后将页面借出后,Ajax不起作用。仅在使用一次提交按钮后,该功能才有效

时间:2018-08-11 11:49:22

标签: jsf primefaces

我所做的只是一个将所选选项显示在textArea中的应用程序。但是从该页面主菜单导航后将页面借出后,Ajax无法使用。该功能仅在使用提交按钮后才能起作用。

下面是我的JSF页面代码

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="/WEB-INF/template.xhtml">

    <ui:define name="title">
        Ajax Framework - <span class="subitem">Basic</span>
    </ui:define>
    <ui:define name="description">
        This example demonstrates a simple but common usage of posting the form, updating the backend value and displaying the output with ajax.
    </ui:define>

    <ui:define name="implementation">

   <h:form>
    <p:panel id="panel" header="Form" style="margin-bottom:10px;">
    <p:messages>
        <p:autoUpdate />
    </p:messages>

    <h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">

        <p:outputLabel for="lazy" value="Lazy:" />
        <p:selectOneMenu id="lazy" value="#{selectOneMenuView.option}" lazy="true" style="width:125px">
            <f:selectItem itemLabel="Select One" itemValue="" />
            <f:selectItems value="#{selectOneMenuView.options}" />
            <f:ajax event="change" listener="#{selectOneMenuView.onChange}" execute="@this" render="textarea1"/>
        </p:selectOneMenu>
    </h:panelGrid>

    <p:commandButton value="Submit" update="display" oncomplete="PF('dlg').show()" icon="ui-icon-check" />

    <p:dialog header="Values" modal="true" showEffect="bounce" widgetVar="dlg" resizable="false">
        <p:panelGrid columns="2" id="display" columnClasses="label,value"> 
            <h:outputText value="Lazy:" />
            <h:outputText value="#{selectOneMenuView.option}" />
        </p:panelGrid>
    </p:dialog>               
    <h3>AutoResize</h3>
    <p:inputTextarea id="textarea1"  value="#{selectOneMenuView.inputTextArea}" rows="6" cols="33" />
    </p:panel>
</h:form>            
    </ui:define>


</ui:composition>

我的托管bean如下

package org.primefaces.showcase.view.input;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.model.SelectItem;
import javax.faces.model.SelectItemGroup;

import org.primefaces.showcase.domain.Theme;
import org.primefaces.showcase.service.ThemeService;

@ManagedBean
public class SelectOneMenuView {

    private String console; 

    private String car;  
    private List<SelectItem> cars;

    private String city;  
    private Map<String,String> cities = new HashMap<String, String>();

    private Theme theme;   
    private List<Theme> themes;

    private String option;  
    private List<String> options;

    private String inputTextArea;


    public String getInputTextArea() {
        return inputTextArea;
    }

    public void setInputTextArea(String inputTextArea) {
        this.inputTextArea = inputTextArea;
    }

    @ManagedProperty("#{themeService}")
    private ThemeService service;

    @PostConstruct
    public void init() {
        //cars
        SelectItemGroup g1 = new SelectItemGroup("German Cars");
        g1.setSelectItems(new SelectItem[] {new SelectItem("BMW", "BMW"), new SelectItem("Mercedes", "Mercedes"), new SelectItem("Volkswagen", "Volkswagen")});

        SelectItemGroup g2 = new SelectItemGroup("American Cars");
        g2.setSelectItems(new SelectItem[] {new SelectItem("Chrysler", "Chrysler"), new SelectItem("GM", "GM"), new SelectItem("Ford", "Ford")});

        cars = new ArrayList<SelectItem>();
        cars.add(g1);
        cars.add(g2);

        //cities
        cities = new HashMap<String, String>();
        cities.put("New York", "New York");
        cities.put("London","London");
        cities.put("Paris","Paris");
        cities.put("Barcelona","Barcelona");
        cities.put("Istanbul","Istanbul");
        cities.put("Berlin","Berlin");

        //themes
        themes = service.getThemes();

        //options
        options = new ArrayList<String>();
        for(int i = 0; i < 20; i++) {
            options.add("Option " + i);
        }
    }

    public String getConsole() {
        return console;
    }

    public void setConsole(String console) {
        this.console = console;
    }

    public String getCar() {
        return car;
    }

    public void setCar(String car) {
        this.car = car;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public Theme getTheme() {
        return theme;
    }

    public void setTheme(Theme theme) {
        this.theme = theme;
    }

    public List<SelectItem> getCars() {
        return cars;
    }

    public Map<String, String> getCities() {
        return cities;
    }

    public List<Theme> getThemes() {
        return themes;
    }

    public void setService(ThemeService service) {
        this.service = service;
    } 

    public String getOption() {
        return option;
    }

    public void setOption(String option) {
        this.option = option;
    }

    public List<String> getOptions() {
        return options;
    }

    public void setOptions(List<String> options) {
        this.options = options;
    }

    public void onChange(){ 
        this.inputTextArea = this.option;
    }

}

我可以知道为什么吗?谁能给我一些指导?

0 个答案:

没有答案