AppCrafter AppCrafter - 2 months ago 59
Java Question

Spring / Thymeleaf: Property or field cannot be found on null, but still rendering

I have a Spring / Thymeleaf app that

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'projectName' cannot be found on null


However, the page looks normal. All variables are rendering with data. I'm just concerned that an exception is being thrown every request.

Here is the controller:

@Controller
@RequestMapping("/download")
public class AppDownloaderController {
@Autowired
InstallLinkJoinedService installLinkJoinedService;


@RequestMapping(value = "/link/{installLink}", method = RequestMethod.GET)
public String getInstallLink (Model model, @PathVariable("installLink") String installLink) {
InstallLinkJoined installLinkJoined = installLinkJoinedService.getInstallLinkWithID(installLink);
if (installLinkJoined != null) {
model.addAttribute("install", installLinkJoined);
}
return "download";
}

}


A snippet of the html in question:

<h3 class="achievement-heading text-primary" th:text="${install.projectName}"></h3><br/>


The field is part of the InstallLinkJoined object:

@Column(nullable = false)
private String projectName;


And I have getters and setters for all fields.

If I comment out the offending line, I simply get an exception at the next variable.

And, as mentioned, all the data in the page is showing up so obviously the model object is not null...

What am I missing?

Answer

You are adding install attribute by checking null,if it's null then nothing will be initialized & then you are taking that in jsp th:text="${install.projectName}",so it's saying cannot be found on null.

So change to

InstallLinkJoined installLinkJoined = installLinkJoinedService.getInstallLinkWithID(installLink);
if (installLinkJoined != null) {
    model.addAttribute("install", installLinkJoined);
} else {
    model.addAttribute("install", new InstallLinkJoined());
}
Comments