在jsf ui中交换2个字符串值

时间:2018-12-02 02:48:55

标签: jsp jsf

所以这是一个非常简单的问题,我只是想不出为什么这没有按我预期的那样工作。

我的项目是J2EE中的单位转换器。 HTML前端,后面是Java。

我的html页面中有2个下拉框。

        <p:selectOneMenu id="convertFrom" value="#{conversions.convertFrom}">
            <f:selectItem itemLabel="Inches" itemValue="Inches" />
            <f:selectItem itemLabel="Feet" itemValue="Feet" />
            <f:selectItem itemLabel="Centimeters" itemValue="Centimeters" />
            <f:selectItem itemLabel="Meters" itemValue="Meters" />
        </p:selectOneMenu>

        <p:selectOneMenu id="convertTo" value="#{conversions.convertTo}">
            <f:selectItem itemLabel="Inches" itemValue="Inches" />
            <f:selectItem itemLabel="Feet" itemValue="Feet" />
            <f:selectItem itemLabel="Centimeters" itemValue="Centimeters" />
            <f:selectItem itemLabel="Meters" itemValue="Meters" />
        </p:selectOneMenu>

已确认这些下拉框可以正常工作,因为我已经完成了转换部分。

我正在尝试实现“开关单位”按钮,因此如果您有英寸>英尺,则可以按一个按钮并将其切换为“英尺>英寸”。因此,convertFrom需要与converTo交换。

public void switchUnits() {
    String unitTo = getConvertTo();
    String unitFrom = getConvertFrom();
    setConvertTo(unitFrom);
    setConvertFrom(unitTo);
}

我在html页面上有一个调用此方法的按钮(我通过对setConvertTo(“ Feet”)进行硬编码并看到它起作用来确认它可以工作)。

因此,通过故障排除,我确定吸气剂和设置器工作正常。并且按钮正在正确调用该方法。

所以TLDR我的问题是switchUnits方法中的代码有什么问题吗?就像这里写的那样,当它被调用时,什么也没有发生。这两个值保持不变。

任何帮助表示感谢,谢谢。

2 个答案:

答案 0 :(得分:0)

您的问题不完整,部分代码在这里不可见,您必须编写按钮代码,但是我认为您需要在调用方法后更新按钮中的selectOneMenus,如下所示:

<p:commandButton id="yourButton" action="#{yourBean.switchUnits}"
 update="form_id:convertFrom form_id:convertTo">
</p:commandButton>

Button更新中selectOneMenus的ID可能会随您的表单结构而变化。

答案 1 :(得分:0)

除了声明要更新组件的@ Soheil.St答案之外,我还可以补充一点,您还需要在<p:ajax/>内放置selectOneMenu才能部分提交数据。 没有提交的数据,您的选择将不会反映在托管bean中。

<p:selectOneMenu id="convertFrom" value="#{conversions.convertFrom}">
    <f:selectItem itemLabel="Inches" itemValue="Inches" />
    <f:selectItem itemLabel="Feet" itemValue="Feet" />
    <f:selectItem itemLabel="Centimeters" itemValue="Centimeters" />
    <f:selectItem itemLabel="Meters" itemValue="Meters" />
    <p:ajax/>
</p:selectOneMenu>

<p:selectOneMenu id="convertTo" value="#{conversions.convertTo}">
    <f:selectItem itemLabel="Inches" itemValue="Inches" />
    <f:selectItem itemLabel="Feet" itemValue="Feet" />
    <f:selectItem itemLabel="Centimeters" itemValue="Centimeters" />
    <f:selectItem itemLabel="Meters" itemValue="Meters" />
    <p:ajax/>
</p:selectOneMenu>

您需要设置process并在按钮中使用selectOneMenu形式(如果它是另一种形式)。