【问题标题】:How to bind h:inputText value to custom object如何将 h:inputText 值绑定到自定义对象
【发布时间】:2011-11-06 18:07:06
【问题描述】:

我正在使用 JSF 2.0(JEE6,Glassfish 3.1)并遇到这样的问题:

我想绑定我的 h:inputTexts 值,而不仅仅是一个简单的字符串或整数,而是我的对象:

public class IDX {

int d;
int k;
int w;

IDX(int d, int k, int w) {
    this.d = d;
    this.k = k;
    this.w = w;
}

//getters&setters
...

在托管 bean 中我有:

private Map<IDX, Object> values; //with getters&setters

构造为 HashMap。现在我想从我的 JSF 页面将 h:inputText 值绑定到对象 IDX,如下所示:

....
<h:form>
   ....
   <h:inputText value="#{myBean.values[1,1,1]}" />
   ....
</h:form>
....

这显然不好看。有任何想法吗?有可能还是我只能使用字符串或整数?

【问题讨论】:

  • 您的对象需要一个转换器。

标签: java binding jsf-2


【解决方案1】:

如果您尝试将 Idx 实例绑定到 h:inputText 您的托管 bean 应如下所示-

@ManagedBean
public class MyBean {
    private Idx idx; //getter/setter

您将需要一个用于 Idx 的转换器,它将 Idx 的实例转换为(和从)字符串。如下——

@FacesConverter(forClass=Idx.class)
public class IdxConverter implements Converter {
    public String getAsString(...//provide implementation
    public Object getAsObject(...//provide implementation

在页面中-

<h:inputText value="#{myBean.idx}"/>

【讨论】:

  • 好的,但我有许多具有不同 idx 的 inputText,我想以某种好的方式将它们全部绑定到一个 Map。我发现的一种方法是将我的 IDX 更改为 Map 中的字符串,然后在我的托管 bean 中将此字符串转换为 IDX。
  • 功能需求是什么?无论您说什么,我的理解是,您正在尝试为托管 bean 中映射中的每个键设置一个 h:inputText,这对我来说到目前为止没有任何意义。
  • 我想将 inputTextes 绑定到我的自定义键,这些键看起来像 1,1,1 或 1,1,2 等(就像在我的第一个代码示例中一样)。唯一的要求是我准备好以这种方式实现为 jsf 页面的模板。但我认为更容易转换它们(无论如何我都需要这样做),我将使用简单的键。唯一的缺点 - 以后会更难阅读和管理。不管怎样,谢谢,你帮了我很多!
猜你喜欢
  • 2011-07-27
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多