Java 绑定a<;h:输入文本>;值设置为bean属性,同时在字段中显示不同的文本
我知道这个标题听起来很荒谬,但我不知道该怎么解释我的意思:) 我有一个用来编辑实体的表单。 每个字段都链接到其相关的bean属性,并且工作正常 我需要做的是在表单字段中显示实体的当前值,以加快编辑速度(使用当前值而不是空字段非常有用!) 因此,我得到了这个edit.xhtml页面,它从get参数获取ID,并使用支持bean中的getFromId方法检索实体 假设该实体存储在一个名为“contact”的var中,我希望使用以下表单:Java 绑定a<;h:输入文本>;值设置为bean属性,同时在字段中显示不同的文本,java,jsf,javabeans,facelets,Java,Jsf,Javabeans,Facelets,我知道这个标题听起来很荒谬,但我不知道该怎么解释我的意思:) 我有一个用来编辑实体的表单。 每个字段都链接到其相关的bean属性,并且工作正常 我需要做的是在表单字段中显示实体的当前值,以加快编辑速度(使用当前值而不是空字段非常有用!) 因此,我得到了这个edit.xhtml页面,它从get参数获取ID,并使用支持bean中的getFromId方法检索实体 假设该实体存储在一个名为“contact”的var中,我希望使用以下表单: <f:view> <h:for
<f:view>
<h:form>
<h1><h:outputText value="Edit"/></h1>
<h:panelGrid columns="2">
<h:outputLabel value="Name:" for="name" />
<h:inputText id="name" value="#{contactsMB.name}" title="Name" required="true"/>
<h:outputLabel value="Surname:" for="surname" />
<h:inputText id="surname" value="#{contactsMB.surname}" title="Cognome"/>
<h:outputLabel value="Email:" for="email" />
<h:inputText id="email" value="#{contactsMB.email}" title="Email" required="true"/>
<h:outputLabel value="Number:" for="number" />
<h:inputText id="number" value="#{contactsMB.number}" title="Number" />
<h:inputHidden id="id" value="#{contactsMB.id}"/>
<h:commandButton value="Edit" action="#{contactsMB.editContact}"/>
</h:panelGrid>
</h:form>
</f:view>
但是我想在texfields中显示contact变量的值
因此,例如,第一个inputText必须显示“stefano”作为名称,但必须链接到contactsMB.name
基本上,它就像inputText的默认值,这个默认值必须来自实体
这可能吗?首先,你应该问问自己:
你真的需要这样做吗?
。如果您正在编辑一个实体,您应该直接利用该实体的getter和setter。可能是这样的:
@ManagedBean
@ViewScoped
public void ContactsMB {
@EJB
private SomeEJB someEJB;
@ManagedProperty(value = "#{param.username}")
private String username;
private User user;
@PostConstruct
public void prepareEditing() {
this.user = someEJB.loadUserFromDatabase(username);
}
// Getters and Setters
}
<h:outputLabel value="Name:" for="name" />
<h:inputText id="name" value="#{contactsMB.user.name}" />
@ManagedBean
@ViewScoped
public void ContactsMB {
@EJB
private SomeEJB someEJB;
@ManagedProperty(value = "#{param.username}")
private String username;
private User user;
private String name;
private String email;
@PostConstruct
public void prepareEditing() {
this.user = someEJB.loadUserFromDatabase(username);
this.name = user.getName();
this.email = user.getEmail();
}
// Getters and Setters
}
然后,例如,您可以按如下方式显示用户名:
@ManagedBean
@ViewScoped
public void ContactsMB {
@EJB
private SomeEJB someEJB;
@ManagedProperty(value = "#{param.username}")
private String username;
private User user;
@PostConstruct
public void prepareEditing() {
this.user = someEJB.loadUserFromDatabase(username);
}
// Getters and Setters
}
<h:outputLabel value="Name:" for="name" />
<h:inputText id="name" value="#{contactsMB.user.name}" />
@ManagedBean
@ViewScoped
public void ContactsMB {
@EJB
private SomeEJB someEJB;
@ManagedProperty(value = "#{param.username}")
private String username;
private User user;
private String name;
private String email;
@PostConstruct
public void prepareEditing() {
this.user = someEJB.loadUserFromDatabase(username);
this.name = user.getName();
this.email = user.getEmail();
}
// Getters and Setters
}
您的需求与显示绑定值的JSF输入的默认行为有什么不同?我知道这很难解释我的问题,所以我再次尝试。如果使用,它将显示contactsMB.getName()给定的值,并在发送表单时调用contactsMB.setName()。但是我需要显示contact.name给出的值,其中contact是引用实体实例的var,而不是contactsMB.name中的值!因此,它必须显示一个不是从beans属性中获取的值,同时在提交表单时仍然设置beans属性。你不能将“默认”值放入contactsMB吗?我明白了。但我仍然不了解全部情况:)为什么不能用contact最初的值填充contactsMB?您需要以某种方式检测显式编辑?不,因为它们不是真正的默认值。这些值取决于传递给页面的ID参数,它们不是“固定”值!我需要@ManagedProperty(value=“#{request.getParameter('id')}”)之类受保护的字符串id;这一个有效,即使我们的老师没有解释这个注释!非常感谢:)如果您使用的是
@ManagedProperty
,那么应该使用JSF的param
,而不是{request.getParameter('id')}
。我认为您应该将其更改为@ManagedProperty(value=“#{param.id}”)
。