Вы не можете сделать это с помощью одного запроса, потому что PUT, POST и DELETE - это разные типы запроса. Если вы используете AJAX, вы можете определить три метода для отправки формы; один на тип запроса.
Так, например, основываясь на одном событии onClick
, вы можете поворачиваться в своем слое JavaScript на основе того, какие входные данные имеют значения, или поворачиваться на каком-то другом аспекте состояния вашего приложения, чтобы выбрать, какой метод использовать и, следовательно, какой тип запроса сделать.
Вы также можете выполнить несколько запросов на основе одного клика, вызвав все три метода подряд.
В любом случае, кажется, что лучшим решением было бы применение вышеуказанной методологии для каждой строки, а не для всей формы. Это, вероятно, позволит вам обобщить ваше решение на строку и добавить столько строк, сколько вы захотите.
Чтобы сделать его действительно неизменным, необходимо инициализировать элементы во время строительства.
Один из способов (и я не говорю, что это красиво!) Сделать это и избежать огромного списка параметров в конструкторе - это иметь изменяемый тип с такими же свойствами. Задайте свойства изменяемого типа по одному через «setters», затем передайте изменяемый объект конструктору неизменяемого типа в качестве единственного аргумента. Затем неизменяемый объект копирует свойства из изменяемого источника в собственные ( final
) члены.
Вы также можете рассмотреть «эффективную неизменность». То есть, несмотря на то, что неизменность не обеспечивается системой, вы используете методы кодирования, которые четко отделяют фазу инициализации от фазы использования. В конце концов, неизменяемость не требуется для сериализации.
Вы можете пойти дальше, создав оболочку, скрывающую реализацию, для интерфейса, который не раскрывает свойства реализации. Оболочка реализует только методы в интерфейсе, делегируя «реальную» реализацию. Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами.
Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами. Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами.20-25 свойств невелики для одного, особенно если вы используете полуприличный редактор.
Если у вас уже есть изменяемый экземпляр при создании неизменяемой версии, просто передайте его конструктору.
Если вы хотите, чтобы был действительно злым хакером , используйте java.beans
создать сериализуемую карту
для изменяемого класса или подкласса, реализующего Externalizable
. В качестве альтернативы вы можете использовать java.beans
XML-сериализацию (XML, который можно отправить через Java-сериализацию ...).
Несколько идей:
Защищенные сеттеры и фабричные методы Вы можете определить bean-компоненты с помощью защищенных методов установки и в том же пакете - фабричный класс, который принимает все параметры и вызывает эти методы. Боб неизменен вне этой упаковки. Для обеспечения этого обязательно закройте свой jar-файл, чтобы конечные пользователи не могли создавать новые классы в одном пакете.
Примечание. Вы можете использовать мои аннотации JavaDude Bean, чтобы упростить создание: http://code.google.com/p/javadude/wiki/Annotations
Например:
@Bean(writer=Access.PROTECTED, // all setXXX methods will be protected
properties={
@Property(name="name"),
@Property(name="age", type=int.class)
})
public class Person extends PersonGen {
}
Создание геттеров и конструктора в eclipse
В Eclipse есть несколько хороших инструментов для быстрой работы:
. Imoutable Decorator
. чтобы определить ваш bean-компонент с помощью методов получения и установки (вы можете использовать описанную выше технику, но включите методы установки), тогда вы можете создать для него класс-оболочку, в котором есть только методы получения.
Мне нравится Mercurial для подобных задач.
Преимущества:
(возможно) Недостатки:
Шаг 2 : Используйте Apache Commons BeanUtils.copyProperties , чтобы скопировать все свойства (то есть переменные экземпляра) из вашего 'большой объект Java-бина' для вашего нового объекта.
Как насчет простого интерфейса только для чтения, содержащего геттеры?
Если класс bean-компонента является вашим собственным, позвольте ему просто реализовать интерфейс и использовать только интерфейс после создания.
Если у вас нет контроля над классом bean-компонента, вы также можете создать интерфейс получателя и реализовать его, создав прокси для интерфейса получателя с обработчиком вызова, делегирующим все вызовы методов bean-компоненту.
Книга Джошуа Блоха "Эффективная Java" иллюстрирует паттерн Builder, в котором простые объекты Builder используются для построения сложного объекта с длинным списком аргументов конструктора. Рекомендую.
http://www.drdobbs.com/java/208403883;jsessionid=PJWS41F5DJ4QRQE1GHRSKH4ATMY32JVN? pgno=2