使用jsf和Ajax更改输入值

3

我有一个关于我想要显示的问题。基本上,我有一个下拉列表,当下拉列表中的内容改变时,我希望页面上的一些输入自动填充。这是我想要填写的其中一个输入。我在ajax方法中调用监听器。 XHTML代码:

<h:outputText value="Version" styleClass="section-label"/>
            <h:inputText id="version" value="#{contextSchemeDetailBean.contextScheme.schemeVersionId}"
                         required="true" maxlength="45"
                         requiredMessage="Please fill out 'Version' field."
                         label="Version" styleClass="section-content input-section">
                <f:validateLength maximum="45"/>
                <p:ajax listener="#{codeListBaseBean.onSelectCodeList}"/>
            </h:inputText>

这段Java代码允许我获取要填写在输入框中的正确值(从blabla中获取GetBlablaFromblabla)。

JavaBean代码:

 public void onSelectCodeList(SelectEvent event){
    setSelectedCodeListName(event.getObject().toString());
    System.out.println("Element selectionne :" + event.getObject());
    System.out.println("Agency Id correspondant :" + GetAgencyIdFromCodeListName(event.getObject().toString()));
    System.out.println("Version correspondante :" + GetVersionFromCodeListName(event.getObject().toString()));
    //System.out.println("agency id ="+agencyIdListValueRepository.findOne(GetAgencyIdFromCodeListName(event.getObject().toString())).getAgencyIdListValueId());
    //System.out.println("agency id ===="+getAgencyIdListValues());
    //setAgencyIdListValue(agencyIdListValueRepository.findOne(GetAgencyIdFromCodeListName(event.getObject().toString())));
    System.out.println("=======================================");
   }

我希望在下拉列表中选择值后,将这些值放入我的输入框中。我知道这不难,但我对JSF不熟悉。谢谢!

我的下拉列表代码如下:

                <h:outputText value="Code List" styleClass="section-label"/>
            <p:autoComplete id="inputCodeList"
                            requiredMessage="Please fill out 'Code List' field."
                            styleClass="section-content input-section"
                            completeMethod="#{codeListBean.completeInput}"
                            dropdown="true" scrollHeight="220"
                            itemValue="#{codeListBaseBean.codeList.listId}">
                <p:ajax event="itemSelect" listener="#{codeListBaseBean.onSelectCodeList}"/>
            </p:autoComplete>

-S


同样!当问题得到回答时,请将问题保留不变。 - Kukeltje
1个回答

2
您需要在下拉菜单中使用ajax标签,并使用render更新输入文本字段的值。
<h:form id="myForm">
    <h:selectOneMenu value="#{bean.selectedVal}">
        <f:selectItems value="#{bean.someValues}"/>
        <f:ajax listener="#{bean.selectValueChanged}" render="myForm:inputToBeUpdated"/>
    </h:selectOneMenu>

    <h:inputText id="inputToBeUpdated" value="#{bean.inputTextVal}"/>
</h:form>

Bean

String selectedVal;
String inputTextVal;

void selectValueChanged() {
     //set value of the input text
     inputTextVal = "some value";
}

我尝试过了,但不起作用。实际上,在那段代码中你何时说“我想填写这个输入”? - Sox -
inputText的值将是#{bean.selectedVal}的值,您需要确保您的inputText的id与render属性内的值匹配。 - DavidZ
1
这就是问题所在!<h:inputText id="version" value="#{contextSchemeDetailBean.contextScheme.schemeVersionId}" 表示我将把信息存储在正确的位置,因此基本上我想做的是不要触碰那一行,并添加另一行来填写此输入。 - Sox -
你的ajax标签里缺少render属性,还需要为你的inputText添加一个id。我更新了我的示例,使其更加清晰。 - DavidZ
2
明白了,那个方法并不完全可行,但是使用渲染的想法让我解决了问题!!我已将您的回答标记为答复。再次感谢 :-) - Sox -
1
没问题,愉快编码。 - DavidZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接