2012-11-20 26 views
2

我是JSF编程的初学者,所以我有一个简单的问题。如何使命令按钮在JSF 2.0中的窗体外工作

我有以下JSF文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

<h:head> 
    <title>Insert Title Here</title> 
</h:head> 

<body> 
    <h:form> 
     <h:panelGrid columns="3"> 

      /* Here I take the username */ 

      <h:outputLabel for="username">Username</h:outputLabel> 
      <h:inputText id="username" value="#{register.user.username}" 
       required="true" requiredMessage="Enter username"> 
       <f:ajax event="blur" render="usernameMessage" /> 
      </h:inputText> 
      <h:message id="usernameMessage" for="username" /> 

      /* Here I take the password */ 

      <h:outputLabel for="password">Password</h:outputLabel> 
      <h:inputSecret id="password" value="#{register.user.password}" 
       required="true" redisplay="true" requiredMessage="Enter password"> 
       <f:ajax event="blur" render="passwordMessage" /> 
      </h:inputSecret> 
      <h:message id="passwordMessage" for="password" /> 

      /* Here I take the email */ 

      <h:outputLabel for="email">Email</h:outputLabel> 
      <h:inputText id="email" value="#{register.user.email}" 
       required="true" requiredMessage="Enter email"> 
       <f:ajax event="blur" render="emailMessage" /> 
      </h:inputText> 
      <h:message id="emailMessage" for="email" /> 

      /* And these are my 3 command buttons, and they are working only when the username, password and email are filled in. */ 

      <h:panelGroup> 
       <h:commandButton value="Register" action="#{register.submit}"> 
        <f:ajax execute="@form" render="@form" /> 
       </h:commandButton> 
       <h:commandButton value="setDB" action="#{register.setDB}"> 
        <f:ajax execute="@form" render="@form" /> 
       </h:commandButton> 
       <h:commandButton value="getDB" action="#{register.getDB}"> 
        <f:ajax execute="@form" render="@form" /> 
       </h:commandButton> 
       <h:commandButton value="reset" action="#{register.reset}"> 
        <f:ajax execute="@form" render="@form" /> 
       </h:commandButton> 
      </h:panelGroup> 

      <h:messages globalOnly="true" layout="table" /> 
     </h:panelGrid> 
    </h:form> 

    /* And this is the button that I want to work without the need to fill in the username, password and email */ 

    <h:panelGroup rendered="#{register.user.ini!=true}"> 
     <h3>Result</h3> 
     <h:commandButton value="getDB" action="#{register.getDB}" /> 
    </h:panelGroup> 

</body> 
</html> 

所以我的问题是,如何让下面的命令按钮的工作:

<h:panelGroup rendered="#{register.user.ini!=true}"> 
    <h3>Result</h3> 
    <h:commandButton value="getDB" action="#{register.getDB}" /> 
</h:panelGroup> 

当我启动应用程序它不会出现。我只想获取数据库信息,而不需要填写以下字段:)其他按钮在窗体中,只有当字段的用户名,密码和电子邮件内有内容时才能使用。此代码既不会产生异常也不会产生错误,但该按钮不起作用(表单外部的那个)。

+0

'h:commandLink'会做。 –

回答

2

不能使用h:commandButton除非它是内h:form

我不知道你正在努力实现的,但如果你想运行一些看看这个PreRenderViewEvent

还什么对bean创建逻辑,你可以在你的bean

@PostConstruct 
public void init() { 
    retrieveDB(); 
} 

此外,它的一个非常糟糕的做法,让获取/设置前缀使用@PostConstruct以豆操作方法,get/set只能用于geters/setter