我正在使用primefaces 4.0和jsf 2.0开发一个java web应用程序。 我有一个文本标签和它的文本框。当用户处于编辑模式,并且想要修改特定文本框的值时,当用户在文本框中输入新值时,文本框的旧值应显示在右侧。所以我添加一个输出文本,在加载时呈现false。我想在用户单击文本框(id =“customer_customername”)时触发此输出文本(id =“test”)。所以渲染应该改变为相等。谁能告诉我怎么做?在我的后端,我有一个实现,dao和服务的接口。
<h:panelGrid id="detail1" columns="2" styleClass="grid" columnClasses="label,value">
<h:outputText value="#{customermsgs['customer.customername.title']}:" />
<h:inputText id="customer_customername" value="# {CustomerComponent.customer.customername}" onclick="#{CustomerComponent.customername}" label="customer_customername">
<f:ajax render="detail1" />
</h:inputText>
<h:outputText id="test" value="#{CustomerComponent.customer.customername}" rendered="#{CustomerComponent.visible}"/>
</h:panelGrid>
public class CustomerComponentImpl implements CustomerComponent {
/**
* Data type variable that provides CRUD operations for Customer entities
*
*/
private boolean visible=false;
private String customername;
public String getCustomername() {
return customername;
}
public void setCustomername(String customername) {
setVisible(true);
this.customername = customername;
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
//some codes goes here.
注意:我也在我的界面中实现了该方法。
onclick事件无效。看起来它不会触发!有人可以帮忙吗?
答案 0 :(得分:0)
此,
<h:inputText ... onclick="#{CustomerComponent.customername}">
绝对不是你的想法。在当前形式中,填充时,它只会导致JavaScript错误,因为#{CustomerComponent.customername}
很可能不会返回一段(语法上有效!)JavaScript代码,应该在点击时执行。相反,它更可能返回表示客户名称的字符串。将其打印到JavaScript上下文中时,它只会被解释为未定义的JavaScript变量。
对于您的具体功能要求,<f:ajax>
默认仅在change
事件中侦听输入组件。您可以相应地设置click
属性,将其更改为event
。总而言之,这应该按照你的意图行事:
<h:inputText id="customer_customername" value="#{CustomerComponent.customer.customername}" label="customer_customername">
<f:ajax event="click" render="detail1" />
</h:inputText>