0

我正在做一个项目,我对 JSF 不太熟悉,所以请纠正这个问题中的任何空白。

我有一个包含域值的属性文件......例如

domain=.com
domain=.net

在我的 Bean 我有这个

private String domain;
private String[] domainSelection;

public void initProp(){

   try {
      Configuration config = new PropertiesConfiguration("prop.properties");
      domainSelection = config.getStringArray("domain");

   } catch (ConfigurationException e) {
      Log.error("Error");
   }

}

.jsp我有 JSF 的页面中

<rich:select id="domain" value="#{Bean.domain}"                                               
      required="true">
     <f:selectItems itemValue="#{Bean.domainSelection}" />
</rich:select>

当我调试它时,我在 domainSelection 中得到了两个值,但我需要将它们传递给 JSF,但我不知道该怎么做。

4

1 回答 1

1

很抱歉最初的答案我完全错过了这个问题。

private List<SelectItem> domains = new ArrayList<SelectItem>();
//for each domain
domains.add("com",firstFromDomainSelection);
domains.add("net",secondFromDomainSelection);

<f:selectItems value="#{Bean.domains}" />

所以这需要getDomains检索它们。

编辑:

我相信只要您再次阅读属性文件,这是可行的。要记住的一件事是该文件可能.war已经存在,因此您将不得不想办法重新添加或将其添加到已部署的文件夹中。

每次视图想要获取它会调用的列表时getDomains(),这意味着我们应该有逻辑在那里每次调用它时提取属性。由于文件 IO,可能会对性能造成轻微影响。

private List<SelectItem> domains;
private Configuration config = new PropertiesConfiguration("prop.properties"); // with accessors

public List<SelectItem> getDomains(){
  domains = new ArrayList<SelectItem>();
  String[]  domainSelection = getConfig().getStringArray("domain");
  for(String domain : domainSelection ){
     //Define desired logic for the value if its the same (.com) pass the same as value
     domains.add( new SelectItem(domain ,domain)); // SelectItem(value, label);
  }
  return domains;
}

我会做什么

我不会使用属性文件,而是使用域表,只需将这些记录动态添加到表中,它们就会被相应地检索。当对该视图有很多请求时,它可能会减慢速度——至少稍微慢一点。要记住的另一个问题是 apache 是否缓存了这些文件。要时刻铭记在心。使用 db 表更安全 IMO。

于 2012-10-15T16:09:03.440 回答