<h:form id="aform">
<p:growl id="debug-growl" showDetail="true" sticky="false" />
<p:inputText id="expression" value="#{debug.expression}" required ="true" />
<p:commandButton update="debug-growl" value="Process" action="#{debug.myaction}" />
<h:outputText value="Source regular expression: #{debug.expression}" rendered="#{not empty debug.expression}" />
</h:form>
豆子
@ManagedBean
@ViewScoped
public class Debug implements Serializable {
private String expression; //getter & setter is present
当我输入值时,它会在h:outputText
元素中提交后显示。
但是如果我输入空值(这是错误的),那么在h:outputText
元素中仍然存在前一个值。
如何隐藏&#39; h:outputText&#39;什么时候没有提交价值?
答案 0 :(得分:2)
所以我看到上面代码有两个问题。
您没有在commandButton上更新h:outputText。您需要在h:outputText中添加一个ID,并将其作为更新添加到命令按钮
<p:commandButton update="debug-growl someText" value="Process" action="#{debug.myaction}" />
<h:outputText id = "someText" value="Source regular expression: #{debug.expression}" rendered="#{not empty debug.expression}" />
inputText上的required =“true”不允许将空值提交给服务器。因此,h:outputText将永远不会为空,因此将始终呈现此值。要解决这个问题,我会在服务器上进行验证。
JSF
删除required =“true”标记
<p:inputText id="expression" value="#{debug.expression}"/>
爪哇
public void myAction(){
//check to make sure inputText isnt null/blank first
if(StringUtils.isBlank(expression))
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Error", "Must provide value"));
else{
//business logic
}
}