【发布时间】:2014-06-16 14:46:09
【问题描述】:
我需要一些我无法理解的帮助:
所以我想使用 commandButton 从 selectOneListBox 中删除一个项目,但问题是当我按下此按钮时,它使用 setter 方法但值始终为 null...我将显示代码。
farm.xhtml
<h:form>
<h:panelGrid columns="1" columnClasses="label, value"
cellpadding="10">
<h:panelGroup style="width: 90%">
<p:inputText id="cropVariation" style="margin-right: 10px"
label="#{msg['farms.form.farmBasicInformation.cropVariation']}"
value="#{farmsController.cropVariation}" />
<p:inputText id="cropRotation" style="margin-right: 10px"
label="#{msg['farms.form.farmBasicInformation.cropRotation']}"
value="#{farmsController.cropRotation}" />
<p:watermark for="cropVariation"
value="#{msg['farms.form.farmBasicInformation.cropVariation']}" />
<p:watermark for="cropRotation"
value="#{msg['farms.form.farmBasicInformation.cropRotation']}" />
<p:commandButton value="#{msg['buttons.add']}"
action="#{farmsController.addCrop()}" ajax="true"
icon="ui-icon-plus"
update="majorCropsSelect cropRotation cropVariation"
process="cropVariation cropRotation @this" />
</h:panelGroup>
</h:panelGrid>
<p:fragment autoUpdate="true">
<h:panelGrid columns="2" columnClasses="label, value">
<p:selectOneListbox id="majorCropsSelect"
style="width: 450px"
value="#{farmsController.selectedCrop}"
converter="#{selectOneListBoxConverter}">
<f:selectItems value="#{farmsController.majorCrops}"
var="majorCrop" itemLabel="#{majorCrop}"
itemValue="#{majorCrop}" />
<p:column>
<h:outputText value="#{majorCrop}" />
</p:column>
</p:selectOneListbox>
<p:commandButton value="#{msg['buttons.remove']}"
action="#{farmsController.removeCrop()}" ajax="true"
icon="ui-icon-minus"/>
</h:panelGrid>
</p:fragment>
</h:form>
FarmsController.java
@ManagedBean
@Controller
@ViewScoped
public class FarmsController extends BaseController {
@Autowired
private FarmsService farmsService;
@Autowired
private SecurityService securityService;
public static String BEAN_PAGE = "farm.jsf";
public static String LIST_PAGE = "farmsManagement.jsf";
private Farm currentFarm;
private List<MajorCrop> majorCrops = new ArrayList<MajorCrop>();
private MajorCrop selectedCrop = null;
private String cropVariation;
private String cropRotation;
public void removeCrop() {
if (selectedCrop != null) {
majorCrops.remove(selectedCrop);
}
}
public MajorCrop getSelectedCrop() {
return selectedCrop;
}
public void setSelectedCrop(MajorCrop selectedCrop) {
this.selectedCrop = selectedCrop; (here the value 'selectedCrop' is always null)
}
public List<MajorCrop> getMajorCrops() {
return majorCrops;
}
public void setMajorCrops(List<MajorCrop> majorCrops) {
this.majorCrops = majorCrops;
}
}
SelectOneListBoxConverter.java
@Component("selectOneListBoxConverter")
@FacesConverter(forClass=FarmsController.class, value="selectOneListBoxConverter")
public class SelectOneListBoxConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
SelectOneListbox p = (SelectOneListbox) component;
MajorCrop dl = (MajorCrop) p.getValue();
return dl;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
return value.toString();
}
}
你知道为什么我可以让 selectedCrop 值总是为空吗?
非常感谢!
【问题讨论】:
-
请创建一个答案并接受它,而不是用解决方案编辑问题(您的版本可能会回滚)
-
因为我的名声,我还不能做,我会在 8 小时内做,我不想浪费你的时间,因为我编辑了问题。谢谢!
标签: java jsf primefaces