2013-05-12 111 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