Java 在可观察列表中编组本地日期
我有一份可以观察到的班级账单清单。此列表使用以下命令进行编组Java 在可观察列表中编组本地日期,java,javafx,jaxb,marshalling,fxml,Java,Javafx,Jaxb,Marshalling,Fxml,我有一份可以观察到的班级账单清单。此列表使用以下命令进行编组 public void saveBillsToFile(File file){ try{ JAXBContext context = JAXBContext .newInstance(BillListWrapper.class); Marshaller m = context.createMarshaller(); m.setPro
public void saveBillsToFile(File file){
try{
JAXBContext context = JAXBContext
.newInstance(BillListWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
BillListWrapper wrapper = new BillListWrapper();
wrapper.setBills(budget.getBills());
m.marshal(wrapper, file);
//TODO setPersonFilePath(file);
}catch(Exception e){
e.printStackTrace(System.out);
}
但是,当我将LocalDate对象属性添加到bill类时,我得到一个NoSuchMethodException。我发现一篇帖子说我需要创建一个XML适配器,比如
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
public LocalDate unmarshal(String v) throws Exception {
return LocalDate.parse(v);
}
public String marshal(LocalDate v) throws Exception {
return v.toString();
}
}
公共类LocalDateAdapter扩展了XmlAdapter{
公共LocalDate解组器(字符串v)引发异常{
返回LocalDate.parse(v);
}
公共字符串封送处理程序(LocalDate v)引发异常{
return v.toString();
}
}
然而,我不确定该把它放在哪里。我想这和我的包装纸有关
@XmlRootElement(name = "bills")
public class BillListWrapper {
private List<Bill> bills;
@XmlElement(name = "bill")
public List<Bill> getBills() {
return bills;
}
public void setBills(List<Bill> bills) {
this.bills = bills;
}
@XmlRootElement(name=“bills”)
公共类BillListWrapper{
私人名单法案;
@xmlement(name=“bill”)
公开名单{
退票;
}
公共票据(清单票据){
这个。账单=账单;
}
法案类别:
public class Bill{
//Properties
private StringProperty name = new SimpleStringProperty();
private StringProperty description = new SimpleStringProperty();
private IntegerProperty amount = new SimpleIntegerProperty();
private IntegerProperty payable = new SimpleIntegerProperty();
private IntegerProperty allocatedAmount = new SimpleIntegerProperty();
private IntegerProperty owedAmount = new SimpleIntegerProperty();
private IntegerProperty priority = new SimpleIntegerProperty();
private IntegerProperty recurrence = new SimpleIntegerProperty();
private StringProperty payments = new SimpleStringProperty();
//private ObjectProperty<LocalDate> lastPayment = new SimpleObjectProperty<LocalDate>();
int originalAmount;
int originalOwed;
public Bill(){
name.set("");
amount.set(0);
owedAmount.set(0);
allocatedAmount.set(0);
description.set("");
payments.set("");
originalAmount = 0;
}
public void allocate(int allocation){
System.out.println(allocation);
allocatedAmount.set(originalAmount + allocation);
if(allocation > amount.get()){
owedAmount.set(originalOwed - allocation + amount.get());
}else if(allocation < amount.get()){
owedAmount.set(originalOwed - allocation + amount.get());
}else if(allocation == amount.get()){
owedAmount.set(originalOwed);
}
}
public void pay(){
if(payable.get() <= allocatedAmount.get()){
allocatedAmount.set(allocatedAmount.get() - payable.get());
}else{
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error!");
alert.setHeaderText("Can't Pay");
alert.setContentText("There is not enough money allocated to pay this.\nChange the value and try again.");
alert.showAndWait();
}
}
//Getters and setters removed
公共类法案{
//性质
私有StringProperty名称=新的SimpleStringProperty();
private StringProperty description=新的SimpleStringProperty();
private IntegerProperty amount=新的SimpleIntegerProperty();
private IntegerProperty Payment=新的SimpleIntegerProperty();
private IntegerProperty allocatedAmount=新的SimpleIntegerProperty();
private IntegerProperty owedAmount=新的SimpleIntegerProperty();
私有IntegerProperty优先级=新的SimpleIntegerProperty();
private IntegerProperty recurrence=新的SimpleIntegerProperty();
private StringProperty payments=新SimpleStringProperty();
//private ObjectProperty lastPayment=新的SimpleObject属性();
国际原始山脉;
国际原创;
公共法案(){
名称.集合(“”);
金额设置(0);
欧维达山集(0);
allocatedAmount.set(0);
description.set(“”);
付款。设置(“”);
原始计数=0;
}
公共无效分配(整数分配){
系统输出打印项次(分配);
allocatedAmount.set(originalAmount+分配);
如果(分配>金额.get()){
owedAmount.set(originalOwed-allocation+amount.get());
}else if(分配 如果(payment.get(),你的账单
类是什么样子的?我更新了帖子以包含类当询问异常时,总是发布异常的完整堆栈跟踪。添加堆栈跟踪你尝试添加到包装类了吗?