当应用程序第一次启动时,是否有任何Spring 3功能可以执行某些方法?我知道我可以设置一个带@Scheduled注释的方法,它只是在启动后执行,但它会定期执行.
我需要获取具有特定注释的字段的值,因此使用反射我可以获得此字段对象.问题是这个字段将永远是私有的,虽然我事先知道它总是有一个getter方法.我知道我可以使用setAccesible(true)并获取其值(当没有PermissionManager时),但我更喜欢调用其getter方法.
我知道我可以通过查找"get + fieldName"找到该方法(虽然我知道例如布尔字段有时被命名为"is + fieldName").
我想知道是否有更好的方法来调用这个getter(许多框架使用getters/setters来访问属性,所以也许他们以另一种方式做).
谢谢
我以这种方式从表单发送一些参数:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过添加一个参数来获得控制器方法中的所有参数
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Run Code Online (Sandbox Code Playgroud)
我想将参数myParam [](而不是其他的)绑定到列表或数组(保持索引顺序的任何东西),所以我尝试使用如下语法:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
Run Code Online (Sandbox Code Playgroud)
和
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
Run Code Online (Sandbox Code Playgroud)
但它们都没有约束myParams.即使我向地图添加了一个值,它也无法绑定参数:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Run Code Online (Sandbox Code Playgroud)
是否有任何语法将一些参数绑定到列表或数组而不必创建一个具有列表属性的@ModelAttribute对象?
谢谢
我想在PostgreSQL数据库中获取两个日期(包括它们)之间的日期列表.例如,如果我有:
那么结果应该是:
29 june 2012
30 june 2012
1 july 2012
2 july 2012
3 july 2012
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL中执行此操作的最佳方法是什么?
谢谢.
我有一些扩展超类的类,在JSP中我想展示这些类的一些属性.我只想制作一个JSP,但我事先并不知道该对象是否具有属性.所以我需要一个JSTL表达式或一个标签来检查我传递的对象是否具有此属性(类似于javascript中的运算符,但在服务器中).
<c:if test="${an expression which checks if myAttribute exists in myObject}">
<!-- Display this only when myObject has the atttribute "myAttribute" -->
<!-- Now I can access safely to "myAttribute" -->
${myObject.myAttribute}
</C:if>
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个?
谢谢.
给定一个locale java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
Run Code Online (Sandbox Code Playgroud)
如何在该数字格式中将用作十进制分隔符的字符(如果它是逗号或点)?如何在不使用新的DecimalFormat(格式)的情况下修改此属性?
谢谢
MaxUploadSizeExceededException当我上传大小超过允许的最大值的文件时,会出现异常.我想在出现此异常时显示错误消息(如验证错误消息).如何在Spring 3中处理此异常以执行此类操作?
谢谢.
我正在发送一封电子邮件,但我正确地收到了该邮件,但该主题的编码不正确.我发送"invitación"但我收到"invitaci?n".消息内容正常.
当主题在String变量中设置时,消息的内容来自Velocity Template的转换.
我已经google了,我看到有人说MimeUtility.encodeText()可以解决问题,但我没有成功.
我该如何解决这个问题?这是我到目前为止的代码.
String subject = "Invitación";
String msgBody = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "/vmTemplates/template.vm", "UTF-8", model);
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
String encodingOptions = "text/html; charset=UTF-8";
Message msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject);
msg.setContent(msgBody, encodingOptions);
Transport.send(msg);
} catch (AddressException e) {
...
} catch (MessagingException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我在Spring应用程序中遵循此方案.
我在另一个问题中询问,在填充请求的参数之前,准备对象的最佳方法是什么.答案是最好的方法是使用转换服务,而不是在@ModelAtribute注释方法中或在initBinder中使用编辑器.
所以我试图使用转换器,但我没有找到类似的例子,我有点卡住了.我编写了如下代码:在init binder中我注册了转换服务.因此,在填充User对象上的值之前,会调用convert()方法从数据库加载对象.问题是这个配置不起作用,因为它将对象用户的id(用户名字段)转换为Object用户,但是它尝试用对象创建一个setUsername(),所以我得到一个"java.lang" .IllegalArgumentException:参数类型不匹配".
任何人都可以给我一个线索或使用ConversionService获得所需行为的方式的示例吗?
谢谢.
@Autowired
private ConversionService conversionService;
@InitBinder("user")
public void initBinder(@RequestParam("username")String username, WebDataBinder binder){
binder.setConversionService(conversionService);
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
Run Code Online (Sandbox Code Playgroud)
有类似的东西:
@Component
public class UserConversionService implements ConversionService{
...
@Override
public Object convert(Object name, TypeDescriptor arg1, TypeDescriptor arg2) {
return userService.find((String)name);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个Spring应用程序,它在PostgreSQL数据库上使用Hibernate.我正在尝试将文件存储在数据库的表中.它似乎将行存储在文件中(我只是在EntityManager上使用persist方法),但是当从数据库加载对象时,我得到以下异常:
org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.
Run Code Online (Sandbox Code Playgroud)
要加载数据,我正在使用MultipartFile瞬态属性,并在其setter中设置我想要保留的信息(byte [],fileName,size).我坚持的实体看起来像这个(我已经省略了其余的getter/setter):
@Entity
@Table(name="myobjects")
public class MyClass {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
@SequenceGenerator(name="sequence", sequenceName="myobjects_pk_seq", allocationSize=1)
@Column(name="id")
private Integer id;
@Lob
private String description;
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Transient
private MultipartFile multipartFile;
@Lob
@Basic(fetch=FetchType.LAZY, optional=true)
byte[] file;
String fileName;
String fileContentType;
Integer fileSize;
public void setMultipartFile(MultipartFile multipartFile) {
this.multipartFile = multipartFile;
try {
this.file = this.multipartFile.getBytes();
this.fileName = this.multipartFile.getOriginalFilename();
this.fileContentType = this.multipartFile.getContentType();
this.fileSize = ((Long) this.multipartFile.getSize()).intValue();
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud) java ×8
spring ×4
spring-mvc ×3
data-binding ×2
postgresql ×2
autocommit ×1
collections ×1
converter ×1
date ×1
encoding ×1
file-upload ×1
forms ×1
getter ×1
hibernate ×1
jakarta-mail ×1
jpa ×1
jsp ×1
jsp-tags ×1
jstl ×1
locale ×1
reflection ×1
sql ×1
velocity ×1