【问题标题】:JSF Java Beans - initialize and proceedJSF Java Beans - 初始化并继续
【发布时间】:2014-09-01 21:43:26
【问题描述】:

我是 JavaBeans 的新手,我需要一些帮助来保持我的第一个小型 JSF 项目的运行。

我正在编写一个小型 Web 应用程序,用户可以在其中使用特定条件搜索建筑物。所以用户在搜索表单中输入“位置”、“物业类型”、“要价”、“房间数量”和“居住空间”。

我的托管 bean 使用 setter/getter 接受请求,现在数据将被传输到 SQL 类,在该类中处理它们并返回匹配的搜索结果。听起来很简单,但我找不到解决方案。

我的托管 bean 现在看起来像这样:

package beans

//import statements
...

@ManagedBean
@RequestScoped
public class PropertySearchBean {
   private String _place
   private String _propertyType
   private double _askingPrice
   private int    _rooms
   private double _livingSpace

   public ArrayList<SearchResults> results = new ArrayList<SearchResults>();

   // empty constructor
   ...

   // getter and setter for these 5 user inputs
   ...

   public void initializeSearchResults() {
      // do the SQL query, recieve search results
      // add it as a new object of 'SearchResults'

      SQLPropertySearch search = new SQLPropertySearch(_place, _propertyType,
                                 _askingPrice, _rooms, _livingSpace);
      ArrayList<Integer> idResults = search.getPropertyIDlist();
      SQLProperty property;

      if(!idResults.isEmpty()) {
         for(int i=0; i<idResults.size(); i++) {
            property = new SQLProperty(idResults.get(i));

            results.add(new SearchResults(
               property.getPropertyID(),
               property.getPropertyName(),
               // and so on..
            ));
         }
      }
   }

   public static class SearchResults {
      int propertyID;
      String propertyName;
      // and so on..

      public SearchResults(int propertyID, String propertyName) {
         this.propertyID = propertyID;
         this.propertyName = propertyName;
         // and so on..
      }

      // getter and setter
      public int getPropertyID() {
         return propertyID;
      }
      public void setPropertyID(int propertyID) {
         this.propertyID = propertyID;
      }
      // and so on..
   }

   public ArrayList<SearchResults> getResults() {
      return results;
   }
}

在我的 XHTML 文件中,我检查了 ArrayList 结果的每个条目。

看起来像这样:

<ui:repeat var="res" value="#{PropertySearchBean.results}">
   <p>#{res.propertyID}</p>
   <p>#{res.propertyName}</p>
</ui:repeat>

我不知道如何初始化 ArrayList,因为首先要做的是搜索本身,以及用户输入。

感谢您的任何帮助!

【问题讨论】:

  • 你想用什么初始化它?您可以使用 @PostConstruct 注释在方法中进行初始工作

标签: java jsf jsf-2 javabeans managed-bean


【解决方案1】:

您已从示例中删除了 getter 和 setter 以提高可读性。我将在此处提供一种实现以确保达成共识(尤其是关于前导下划线)。

public String getPlace() {
    return _place;
}

public void setPlace(String place) {
    this._place = place;
}

使用值绑定#{propertySearchBean.place}(见下文)可以在您的视图中访问属性“place”。

您的代码用于执行搜索。因此,您必须将用户输入从您的 XHTML 文件(视图)传输到您的托管 bean。为此,您需要在视图中添加一个表单。每个搜索查询参数都使用特定的值绑定绑定到您的 bean。此外,表单还包含一个&lt;h:commandButton&gt; 标记,最终触发结果列表的初始化。

<h:form>
    <h:outputLabel for="place" value="Place:" />
    <h:inputText id="place" value="#{propertySearchBean.place}" />

    <!-- Additional fields -->

    <h:commandButton action="#{propertySearchBean.initializeSearchResults}" 
        value="Search"/>
</h:form>

注意:您在示例中使用了以下代码

<ui:repeat var="res" value="#{PropertySearchBean.results}">

确保 bean 名称的第一个字母是小写的(propertySearchBean 而不是 PropertySearchBean)。所以这需要更新为

<ui:repeat var="res" value="#{propertySearchBean.results}">

【讨论】:

  • 这对我帮助很大。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多