如果没有用户输入,则隐藏h:outputText元素

时间:2016-08-01 12:20:31

标签: jsf jsf-2 primefaces jsf-2.2

<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;什么时候没有提交价值?

1 个答案:

答案 0 :(得分:2)

所以我看到上面代码有两个问题。

  1. 您没有在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}" />
    
  2. 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
        }
    }