JSF:一个文本输入框控制所有我的按钮

时间:2013-04-16 22:18:35

标签: html jsf jsf-2

我正在尝试使用三个不同的输入文本框来使用JSF,这些文本框可以使用三个单独的按钮。

但是,我发现前两个文本框根本不起作用,并且最后一个文本框的用户输入文本是唯一可以实际用于所有三个按钮的文本框。

有人可以告诉我我的代码有什么问题吗?感谢。

            <h:panelGrid columns="1" style="padding-left:20px;" cellspacing="30">
            <h:panelGroup style="color: black; font-size:medium;" >
                <b style="color: black;">Search for species reviews</b> by name (scientific or common)<br/>
                    <p>&nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="name" size="20" value="#{searchBean.inputName}" required="false" />                                 
                    &nbsp;&nbsp;<h:commandLink action="#{searchBean.searchByName}" class="buttons">Search</h:commandLink></p>
                <h:message for="name" errorClass="errors" style="color: red;" />   
                </h:panelGroup>

                <h:panelGroup style="color: black; font-size:medium;">
                <p><b style="color: black; font-size:medium; padding-bottom:25px;">Find Species Reviews</b><br/></p>
                    &nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="searchOne" size="20" value="#{searchBean.inputName}" required="false" /> &nbsp; <h:commandLink action="#{searchBean.searchByOther}" class="buttons">Enter Species</h:commandLink>&nbsp; or &nbsp;&nbsp;<h:commandLink action="#{searchBean.reviewSearchAction}" class="buttons
">Andvanced Search</h:commandLink>
                </h:panelGroup>

                <h:panelGroup style="color: black; font-size:medium;">
                <p><b style="color: black; font-size:medium;">Find Fire Studies</b><br/></p>
                    &nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="searchTwo" size="20" value="#{searchBean.inputName}" required="false" /> &nbsp; <h:commandLink action="#{searchBean.searchByFireStudy}" class="buttons">Enter Species</h:commandLink>&nbsp; or &nbsp; <h:commandLink action="#{searchBean.fireStudySearchAction}" class="buttons">Advanced Search</h:commandLink>
                </h:panelGroup>

2 个答案:

答案 0 :(得分:2)

将所有内容放在同一个表单中没有错。但是,由于您对所有三个value="#{searchBean.inputName}"使用相同的<h:inputText>,因此当您提交整个表单时,最后一个<h:inputText>的值将覆盖前两个的值。< / p>

要解决此问题,我认为您可以尝试以下方法之一:

  1. 使用bean的不同属性来保存不同输入文本的值(即对第一个inputName1使用<h:inputText>,为第二个使用inputName2,依此类推。)
  2. 如果您在同一页面上呈现结果,则可以使用<f:ajax>并告诉JSF使用其execute属性提交的内容。您的按钮将如下所示:

    <h:inputText id="input1" value="searchBean.inputName" />
    
    <h:commandLink value="Search 1" action="#{searchBean.searchByName}" class="buttons">
        <f:ajax execute="input1" render="result" />
    </h:commandLink>
    

答案 1 :(得分:1)

您需要为每个<h:form>使用单独的<h:panelGroup>,因为<h:commandLink>需要位于<h:form>内,如果有多个<h:commandLink><h:form>个按钮,每个按钮都会提交相同的表格。

        <h:panelGrid columns="1" style="padding-left:20px;" cellspacing="30">
<h:form>
        <h:panelGroup style="color: black; font-size:medium;" >
            <b style="color: black;">Search for species reviews</b> by name (scientific or common)<br/>
                <p>&nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="name" size="20" value="#{searchBean.inputName}" required="false" />                                 
                &nbsp;&nbsp;<h:commandLink action="#{searchBean.searchByName}" class="buttons">Search</h:commandLink></p>
            <h:message for="name" errorClass="errors" style="color: red;" />   
            </h:panelGroup>
</h:form>
<h:form>
            <h:panelGroup style="color: black; font-size:medium;">
            <p><b style="color: black; font-size:medium; padding-bottom:25px;">Find Species Reviews</b><br/></p>
                &nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="searchOne" size="20" value="#{searchBean.inputName}" required="false" /> &nbsp; <h:commandLink action="#{searchBean.searchByOther}" class="buttons">Enter Species</h:commandLink>&nbsp; or &nbsp;&nbsp;<h:commandLink action="#{searchBean.reviewSearchAction}" class="buttons">Andvanced Search</h:commandLink>
            </h:panelGroup>
</h:form>
<h:form>
            <h:panelGroup style="color: black; font-size:medium;">
            <p><b style="color: black; font-size:medium;">Find Fire Studies</b><br/></p>
                &nbsp;&nbsp;&nbsp;&nbsp;<h:inputText id="searchTwo" size="20" value="#{searchBean.inputName}" required="false" /> &nbsp; <h:commandLink action="#{searchBean.searchByFireStudy}" class="buttons">Enter Species</h:commandLink>&nbsp; or &nbsp; <h:commandLink action="#{searchBean.fireStudySearchAction}" class="buttons">Advanced Search</h:commandLink>
            </h:panelGroup>
</h:form>