将已支持bean的String值添加到inputtext字段

时间:2018-04-16 13:27:44

标签: jsf

我有一个必须能够执行以下操作的Web程序:

用户将编写一条将发送给许多目标的消息。在这种情况下,用户必须能够在他的消息中插入可变数据。例如:

亲爱的$ {strName}生日快乐!

在这种情况下,用户将有一个inputtext字段来编写消息,下拉菜单中包含预先确定的字符串(名称,年龄,性别等),然后通过命令按钮传递给inputtext领域。然后程序如何读取这些子串并将它们转换为可变数据并不重要,我已经想到了。

我的问题是我不知道如何将下拉列表中的值插入到inputtex表单中。有任何想法吗?我将提供一个关于我的表单形状的样本。

Mockup

XHTML:

         <div class="col-md-3">
                                    <label style="padding-top:5px">Dados variaveis:</label><br/>
                                    <p:selectOneMenu value ="#{sistemaDeAvisos.buscaAlvosDB.variavel}" onchange="submit()">
                                        <f:selectItems value="#{sistemaDeAvisos.buscaAlvosDB.alvosTestesDropdown}"/>
                                    </p:selectOneMenu>
                                    <p:commandButton value="Submit"/>
                                </div>
                            </div>
                            <div class="row"  style="margin-left: 5px;margin-right: 5px">
                                <div class="col-md-12">
                                    <div class="form-group">
                                        <label for="strMensagem">
                                            Mensagem(*): 
                                        </label>
                                        <h:inputTextarea value="#{sistemaDeAvisos.mensagem.strMensagem}" id="strMensagem" style="width:100%;min-height:200px"/>     
                                    </div>
                                </div> 

支持Bean

public class BuscaAlvosDB {

private EntityManager em = Conexao.getInstancia().getConexaoMysql();
private ArrayList<AlvoCampanhaBean> alvosCampanhaList = new ArrayList();
private String variavel;
private List <String> alvosTestesDropdown = new ArrayList();

public void carregaAlvos()  {

    //Dropdown Field List
    alvosTestesDropdown.add("strName");
    alvosTestesDropdown.add("strID");
    alvosTestesDropdown.add("strPhoneNumber");
    alvosTestesDropdown.add("strEmail");

    }
}

处理更新的方法

public void handleEvent(){

    StringBuilder strBuilder = new StringBuilder(mensagem.getStrMensagem());
    strBuilder.append(variavel);
    mensagem.setStrMensagem(strBuilder.toString());
    System.out.println(mensagem.getStrMensagem());
    System.out.println(strBuilder.toString());

}

1 个答案:

答案 0 :(得分:0)

根据我们的评论,您可以将JSF代码包装在一个独立的<h:form />标记中,并使用AJAX将表单发送到您的bean,然后更新您的textarea的内容。这就是我的想法:

    <h:form prependId="false" id="form">
        <h:selectOneMenu id="sel" label="Name: " value="#{testBean.selectValue}">
            <f:selectItem itemLabel="Choose" itemValue="" />
            <f:selectItem itemLabel="Joe" itemValue="Joe" />
            <f:selectItem itemLabel="Amy" itemValue="Amy" />
        </h:selectOneMenu>

        <h:commandButton type="button" value="Submit" id="btn" action="#{testBean.updateTextarea}">
            <!-- This sends the form with the "onclick" event to the backing bean to update the bean attributes, and then it updates the textarea -->
            <f:ajax execute="@form" event="click" render="txt" />
        </h:commandButton>

        <h:inputTextarea value="#{testBean.textareaValue}" id="txt" />
    </h:form>

在你的支持bean中,你可以创建一个简单的方法,将textarea消息与select中选择的值连接起来。像这样:

//. . . 
private String selectValue;
private String textareaValue;

// getter and setter

public void updateTextarea() {
    setTextareaValue("Dear " + getSelectValue() + " happy birthday!");
}
//. . .

尝试一下,如果您需要别的东西,请告诉我。