2013-05-12 97 views
1

我試圖從Java Bean訪問JSF元素,因此我可以在我的應用程序中使用它,但我需要將文本從textarea發送到<f:setPropertyActionListener />問題是,我不知道如何告訴<f:setPropertyActionListener />採取`textarea的價值爲JSF元素設置正確的值

我敢肯定,這是一個小的語法錯誤,但我無法看到它U__U

下面是一個代碼PICE,我會如果你告訴我在未來的情況下如何去做,我會很需要;)

<h:form> 
     <h:dataTable var="answer" value="#{AnswerController.answer}"> 
      <h:column> 
       #{msgs.newAnswer}<br/> 
       <h:inputTextarea id="textanswer" name="text" rows="5" cols="20" /> <br/> 
       <h:commandButton value="#{msgs.aceptButton}" type="submit" action="#{AnswerController.newAnswer(answer)}" immediate="true"> 
        <f:setPropertyActionListener target="#{AnswerController.currentAnswer}" 
         value="textanswer" /> 
       </h:commandButton> 
      </h:column> 
     </h:dataTable>    
    </h:form> 
+1

感謝您的提示;)我正在改變它;) – Santanor 2013-05-12 14:59:30

+0

''是不必要的;只需將''的'value'綁定到'#{AnswerController.currentAnswer}',這樣就可以得到'''。有沒有什麼限制你這樣做? – kolossus 2013-05-12 15:15:04

+0

如果我這樣做,當我改變inputTextArea的值時,它會修改Bean中的值? – Santanor 2013-05-12 15:27:49

回答

2

關於使用<f:setPropertyActionListener> kolossus是正確的:如果您使用EL 2.2,能夠使用參數調用方法,則不是必需的。否則,該標籤可用於識別命令按鈕的哪個被按下,並最終哪個答案應該在要操縱的bean中出現。

在你的情況下,我可以看到兩個用例,這兩個用例如下所述。

提交只有一個答案

在這種情況下,你應該使用每個數據迭代一個形式,使得只有一個答案會來的服務器。把kolossus'註釋爲代碼,以及有:

<h:dataTable var="answer" value="#{bean.answers}"> 
    <h:column> 
     <h:form> 
      #{msgs.newAnswer}<br/> 
      <h:inputTextarea id="textanswer" value="#{bean.currentAnswer}" rows="5" cols="20" /> <br/> 
      <h:commandButton value="#{msgs.aceptButton}" action="#{bean.newAnswer}" /> 
     </h:form> 
    </h:column> 
</h:dataTable> 

有了這個代碼,這個bean的一個字符串屬性是不夠的,它會在一個監聽方法可用:

private String currentAnswer;//getter+setter 

提交所有答案

在這種情況下,你應該有每一個數據表的形式,所有的答案將在支持Bean的列表結束:

<h:form> 
    <h:dataTable var="answer" value="#{bean.answers}"> 
     <h:column> 
      #{msgs.newAnswer}<br/> 
      <h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/> 
     </h:column> 
    </h:dataTable> 
    <h:commandButton value="#{msgs.aceptButton}" action="#{bean.newAnswers}" /> 
</h:form> 

在這種情況下,一個字符串列表,將形成在填充提交和所有答案將在操作方法可供選擇:

List<String> answers;//getter+setter 

帶參數的方法調用或<f:setPropertyActionListener>

的使用情況

如您所見,上述兩種設置均未使用它們。如果您想知道選擇了哪個答案,那麼它們很有用,以便正確的答案可以被操縱。像:

<h:dataTable var="answer" value="#{bean.answers}"> 
    <h:column> 
     <h:form> 
      #{msgs.deleteAnswer}<br/> 
      <h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/> 
      <h:commandButton value="#{msgs.deleteButton}" action="#{bean.deleteAnswer(answer)}" /> 
     </h:form> 
    </h:column> 
</h:dataTable> 

<h:dataTable var="answer" value="#{bean.answers}"> 
    <h:column> 
     <h:form> 
      #{msgs.deleteAnswer}<br/> 
      <h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/> 
      <h:commandButton value="#{msgs.deleteButton}" action="#{bean.deleteAnswer(answer)}"> 
       <f:setPropertyActionListener value="#{answer}" target="#{bean.currentAnswer}" /> 
      </h:commandButton> 
     </h:form> 
    </h:column> 
</h:dataTable> 

在與按鈕點擊相關聯的第一示例的答案將可作爲方法的參數,以及與按鈕點擊相關聯的第二示例答案

或可替代地將被設置在調用操作方法之前調用bean屬性,並將作爲currentAnswer bean屬性提供。

+0

謝謝你,夥計! :D你真的很有幫助:D – Santanor 2013-05-12 19:17:01

+0

De nada amigo!不客氣。 – skuntsel 2013-05-12 19:18:14