发送p:autoComplete值作为JSF中的参数

时间:2014-08-15 03:57:42

标签: jsf primefaces

我的页面中有一个罕见的情况我有一个“p:autoComplete”,它绑定到一个支持bean,我可以从支持bean读取该自动完成项。 但问题是,当用户按下按钮时,需要将该自动完成的选定值作为参数传递,并带有其他一些参数。我真的不知道怎么做?

这是我的页面,其中包含自动填充功能

<p:panel header="Employee sales" style="width:500px"
                toggleable="true" toggleSpeed="500" closeSpeed="500">

                <p:autoComplete id="user_auto_complete"
                    value="#{salesReportMainController.userFromAutoComplete}"
                    completeMethod="#{salesReportMainController.completeUser}"
                    var="user" itemLabel="#{user.userName}" itemValue="#{user}"
                    converter="#{userConverter}" forceSelection="true" />

                <p:commandButton id="Search" value="Generate"
                    action="admin_common_barchart">
                    <f:param name="todaysDate"
                        value="#{salesReportMainController.todaysDate}" />
                    <f:param name="beforDate"
                        value="#{salesReportMainController.dateBeforOneYear}" />
                    <f:param name="employeeName"
                        value="#{salesReportMainController.userFromAutoComplete.userName}" />

                </p:commandButton>


            </p:panel>

这是绑定到该页面的支持bean

@ViewScoped
public class SalesReportMainController implements Serializable{
    private static final long serialVersionUID = 1L;

    @ManagedProperty(value = "#{userService}")
    public UserService userService;
    public DateTime todaysDate;
    public DateTime dateBeforOneYear;
    public DateTime dateBeforsixMonths;
    public List<User> allUsers;
    public List<User> acFilterdUsers;

    public User userFromAutoComplete;


    @PostConstruct
    public void init(){
        int oneYear = ConstantConfiguration.YearsInMonths.ONE_YEAR.getValue();
        int sixMonths = ConstantConfiguration.YearsInMonths.SIX_MONTH.getValue();
        todaysDate = new DateTime();
        dateBeforOneYear = new DateTime(todaysDate).minusMonths(oneYear);
        dateBeforsixMonths = new DateTime(todaysDate).minusMonths(sixMonths);
    }

//  public String buttonClick(){
//      System.out.println("aaaaaaaa");
//      return null;
//  }

    public List<User> completeUser(String query) {
        allUsers = userService.getAllUsers();
        acFilterdUsers = new ArrayList<User>();

        for (User user : allUsers) {
            if(user.getUserName().toLowerCase().startsWith(query)){
                acFilterdUsers.add(user);
            }
        }

        return acFilterdUsers;
    }

    public String getAutoCompleteUser() {
        if (userFromAutoComplete != null) {
            //i can get the value of the selected item form auto complete
        }
        return null;
    }

    //getters and setters
}

这是我要加载的页面

     <h:form id="common_chart_form" prependId="flase">
        <p:growl id="growl" showDetail="true" autoUpdate="true"
            sticky="false" />
            <p:outputLabel id="labelvalue" value="aaaaaaaaaa"/>

            <p:chart id="chart" type="bar"
                model="#{commonChartController.barModel}" style="height:600px" />

        <p:commandButton value="Print" type="button" icon="ui-icon-print">
            <p:printer target="chart" />
        </p:commandButton>

        <p:commandButton value="Back" action="admin_sales_reports" />
    </h:form>

这是上一页的支持bean

@Component
@ManagedBean
@RequestScoped
public class CommonChartController implements Serializable{
    private static final long serialVersionUID = 1L;
    @ManagedProperty(value = "#{orderService}")
    public OrderService orderService;
    @ManagedProperty(value = "#{userService}")
    public UserService userService;
    List<MonthSales> salesList;
    private BarChartModel barModel;


    @PostConstruct
    public void init() {
        String dateTo = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("todaysDate");
        String dateFrom = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("beforDate");
        String employeeName = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("employeeName");

        System.out.println("user Name : "+employeeName);

        if(employeeName != null && !employeeName.equals("")){
            User user = userService.getUserByUserName("admin");
            salesList = orderService.getMonthlySalesByUserName(UserUtility.stringDateToJodaDateTime(dateFrom).toDate(), UserUtility.stringDateToJodaDateTime(dateTo).toDate(), user);
            createBarModel(salesList, user);
        }else {
            salesList = orderService.getMonthlySales(UserUtility.stringDateToJodaDateTime(dateFrom).toDate(), UserUtility.stringDateToJodaDateTime(dateTo).toDate());
            createBarModel(salesList);
        }
//              
//        salesList = orderService.getMonthlySales(UserUtility.stringDateToJodaDateTime(dateFrom).toDate(), UserUtility.stringDateToJodaDateTime(dateTo).toDate());
//        createBarModel(salesList);
    }
}

我可以阅读“dateTo”参数和“dateFrom”参数。问题是“employeeName”param是alwayas null

0 个答案:

没有答案