所以这是一个非常简单的问题,我只是想不出为什么这没有按我预期的那样工作。
我的项目是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方法中的代码有什么问题吗?就像这里写的那样,当它被调用时,什么也没有发生。这两个值保持不变。
任何帮助表示感谢,谢谢。
答案 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
形式(如果它是另一种形式)。