Java 如何使用PrimeFaces在p:SelectOne菜单中选择特定值后自动显示文本字段?
当我在p:selectOneMenu中选择某个特定项时,我想显示一个新的文本字段,或者不可禁用它Java 如何使用PrimeFaces在p:SelectOne菜单中选择特定值后自动显示文本字段?,java,jsf,primefaces,selectonemenu,Java,Jsf,Primefaces,Selectonemenu,当我在p:selectOneMenu中选择某个特定项时,我想显示一个新的文本字段,或者不可禁用它 <p:selectOneMenu id="especie" value="#{histopatologiaMB.histopatologia.especie}"> <f:selectItem itemLabel="Selecione" itemValue="" /> <f:selectItem itemLabel="Canino" itemValue="
<p:selectOneMenu id="especie" value="#{histopatologiaMB.histopatologia.especie}">
<f:selectItem itemLabel="Selecione" itemValue="" />
<f:selectItem itemLabel="Canino" itemValue="Canino" />
<f:selectItem itemLabel="Caprino" itemValue="Caprino" />
<f:selectItem itemLabel="Coelho" itemValue="Coelho" />
<f:selectItem itemLabel="Felino" itemValue="Felino" />
<f:selectItem itemLabel="Suíno" itemValue="Suíno" />
<f:selectItem itemLabel="Equino" itemValue="Equino" />
<f:selectItem itemLabel="Ovino" itemValue="Ovino" />
<f:selectItem itemLabel="Ave Doméstica" itemValue="Ave Doméstica" />
<f:selectItem itemLabel="Silvestre" itemValue="Silvestre" />
<p:ajax update="detalhe" event="change" listener="#{bean.listener}" />
</p:selectOneMenu>
代码:
用户选择项目“Silvestre”后,应显示以下inputMask或inputText:
<p:inputMask id="detalhe" size="30" value="#{histopatologiaMB.histopatologia.silvestreDetalhe}" maxlength="255"/>
我一直在寻找解决方案,我找到了一些,但没有一个解决我的问题。如果有人知道如何解决这个问题,请帮助我。您应该在SelectOne菜单中添加一个侦听器
<p:selectOneMenu id="especie" value="#{histopatologiaMB.histopatologia.especie}">
<f:selectItem itemLabel="Selecione" itemValue="" />
<f:selectItem itemLabel="Canino" itemValue="Canino" />
<f:selectItem itemLabel="Caprino" itemValue="Caprino" />
<f:selectItem itemLabel="Coelho" itemValue="Coelho" />
<f:selectItem itemLabel="Felino" itemValue="Felino" />
<f:selectItem itemLabel="Suíno" itemValue="Suíno" />
<f:selectItem itemLabel="Equino" itemValue="Equino" />
<f:selectItem itemLabel="Ovino" itemValue="Ovino" />
<f:selectItem itemLabel="Ave Doméstica" itemValue="Ave Doméstica" />
<f:selectItem itemLabel="Silvestre" itemValue="Silvestre" />
<p:ajax update="detalhe" event="change" listener="#{bean.listener}" />
</p:selectOneMenu>
在监听器内部,您必须完成显示或不显示输入掩码所需的工作。当需要显示它时,将布尔值传递为true
public void listener() {
//Do some stuff for showing or not the inputMask.
renderedInputMask = true;
}
并使用布尔值将渲染属性添加到inputMask
<h:panelGrid id="detalhe" columns="1">
<p:inputMask size="30" rendered="#{bean.renderedInputMask}" value="#{histopatologiaMB.histopatologia.silvestreDetalhe}" maxlength="255"/>
</h:panelGrid>
我希望这能对你有所帮助。试试这个,这对我很有用
<p:selectOneMenu id="especie" value="#{histopatologiaMB.histopatologia.especie}">
<f:selectItem itemLabel="Canino" itemValue="Canino" />
<f:selectItem itemLabel="Caprino" itemValue="Caprino" />
<p:ajax update=":formId:detalhe" listener="#{bean.ajaxMethod}" />
私有布尔showText=false;
//showText的Getter setter
公共方法(){
if(getspecie().isEmpty()){
设置显示文本(假);
}否则{
设置显示文本(真);
}
}
您必须将p:inputMask
放入一个包装器中,该包装器将包含id=“detalhe”
我按照您的建议做了,Lamq。在listener()中,我输入了以下代码:“if(historopatologia.getspecie().equalsIgnoreCase(“Silvestre”){renderInputMask=true;}”。但是,直到我将p:ajax中的更新从“detalhe”更改为“:form:test”,并将inputMask放在。它可以工作,但inputMask字段是在主窗体之外生成的,而不是在p:SelectOne菜单旁边生成的。你知道如何让inputMask字段显示在Selecomenu的旁边吗?是的,但是我需要你的完整xhtml页面,你能用它更新你的帖子吗?
<p:selectOneMenu id="especie" value="#{histopatologiaMB.histopatologia.especie}">
<f:selectItem itemLabel="Canino" itemValue="Canino" />
<f:selectItem itemLabel="Caprino" itemValue="Caprino" />
<p:ajax update=":formId:detalhe" listener="#{bean.ajaxMethod}" />
<p:inputText id="detalhe" size="30" value="#{histopatologiaMB.histopatologia.silvestreDetalhe}" maxlength="255" style="display: #{userBean.showText ? '' : 'none'}">
private Boolean showText = false;
//Getter-setter of showText
public void ajaxMethod() {
if (getEspecie().isEmpty()) {
setShowText(false);
} else {
setShowText(true);
}
}